2013-03-21 2 views
4

Можно ли разрешить двум клиентам напрямую взаимодействовать без сервера?Разрешить двум клиентам взаимодействовать без сервера

Я имею в виду сайты, например, можно создать чат между двумя клиентами, которые находятся на одном сайте, используя только javascript на стороне клиента.

Если не, то какая минимальная серверная сторона позволяет работать чатом между активными клиентами на веб-сайте? (например: один файл PHP и без базы данных)?

Моей идея: Хранение разговора будет легко сделать с помощью localStorage на каждом клиенте, проблема заключается в том, чтобы отправить некоторые данные из client1 в client2 без сохранения ничего (или в лучшем случае этого сообщения) в базе данных. Также обратите внимание, что «прошлые» беседы не должны быть видимыми, поэтому для этого не требуется хранилище.

Обратите внимание, что я не хочу никаких решений nodeJS или websocket, я хочу что-то максимально простое. Итак, каковы минимальные code и files, чтобы сделать чат между онлайн-пользователями?

+1

Да. Укажите каждому участнику номер телефона другого участника? ;-) Серьезно, хотя +1 от меня, поскольку меня интересуют ответы. – Sepster

+0

@JamieHutber Я предполагаю, что OP спрашивает, можно ли настроить слушателя в JavaScript внутри браузера (предположительно, сервер каким-то образом сообщит каждому клиенту о деталях другого клиента, а затем оставьте его для клиентов). Ваш комментарий предполагает, что это невозможно. – Sepster

+0

Это не может быть сделано, потому что по крайней мере одному из клиентов нужно будет открыть порт 80 для запросов - это то, что делают только серверы. И даже тогда, javascript не может принимать входящие запросы. – Jodes

ответ

3

API-интерфейсы WebRTC позволят JavaScript инициировать прямое соединение между браузером и браузером, но сервер все еще должен обслуживать страницу и координировать сеанс.

API-интерфейсы по-прежнему быстро развиваются и доступны только в современных браузерах, так что они еще не готовы для реального использования в производстве.

Однако — быть честным — за то, что вы пытаетесь сделать, самый простой вариант узла и socket.io:

var http=require('http'), express=require('express'), sio = require('socket.io') 
    , app=express(), srv = http.createServer(app); 

app.use(express.static(__dirname+'/static')); 

sio.listen(srv); 
srv.listen(80); 

... и теперь у вас есть работающий сервер WebSockets в 5 строк , Поместите все свои клиентские вещи в статическую папку, и вам хорошо идти.

0

Нет, это невозможно. Если вы хотите использовать окно чата, вам необходимо сохранить данные на сервере. И что связывает клиентов, например, отображать тексты чата и одни и те же вещи для каждого клиента, они поступают с сервера. Так что это невозможно. Ну, даже бесплатные чат-боксы помещают данные каждого сайта на свои серверы.

Что касается вашей идеи с использованием localStorage, возможно, это возможно (но все же, используя новый протокол WebSocket), но это не работает во временном измерении, правильно? если другой пользователь присоединится, они не будут видеть, что было отправлено ранее.

+0

Ну, по крайней мере, как бы я отправил текстовую строку от клиента А к клиенту Б без сохранения каких-либо данных на сервере? – Cristy

+0

Я сказал в своем вопросе, что мне не нужна история, просто позвольте онлайн-пользователям взаимодействовать. – Cristy

+0

Ну .. я думаю, что WebSocket - самый простой способ прямо сейчас. – aIKid

0

HTML5 получил новый Web Sockets feature

При этом вмешательство сервера почти nullified..The клиент и сервер общаются с помощью новых протоколов

  • WS - протокол Web Sockets
  • WSS - Web Розетки безопасный протокол (аналогично HTTPS)

Live demo

+0

Я знаю, но мне нужна минимальная реализация, которая будет работать на любом сервере, но в основном с 'PHP' на сервере. WebSockets довольно сложно настроить для PHP. – Cristy

+0

У веб-сокетов по-прежнему требуется сервер. Он просто позволяет поддерживать постоянное соединение между клиентом и сервером. Это не связано с C2C. – Jodes

Смежные вопросы