2016-10-28 2 views
0

Я кодирую простую комнату чата, используя WebSocket, Javascript (клиент) и Python (сервер). Я прочитал несколько учебников и документации, и вот мои два вопроса.Это обычное использование WebSocket или низкоуровневого?

1) На стороне JS, это нормально, что я должен делать такие вещи, как:

ws.send(JSON.stringify({ "type" : "message", "message" : "Hello" })); 
ws.send(JSON.stringify({ "type" : "username_change", "newusername" : "John" })); 

?

Нет ли что-то «менее низкоуровневое», например, ws.emit('message', 'hello') или ws.emit('username_change', 'John')?

2) На стороне сервера (с помощью рамки Python + Bottle) это стандарт, чтобы иметь:

users = set() 

@get('/websocket', apply=[websocket]) 
def chat(ws): 
    users.add(ws) 
    while True: 
     msg = ws.receive() 
     for u in users: 
      u.send(msg) 
    users.remove(ws) 

Я нахожу это довольно низкий уровень еще раз, чтобы сохранить список пользователей себя как а также факт отправки сообщений один за другим всем пользователям с циклом for. Я думал, что есть функция .broadcast(), которая позволяет автоматически отправлять сообщения всем подключенным пользователям.

Я пропустил что-то в ландшафте Websocket?

+1

Интерфейс более высокого уровня, о котором вы спрашиваете, будет socket.io, который является слоем поверх webSocket. – jfriend00

+0

Хорошо спасибо @ jfriend00. Содержит ли socket.io все подключенные пользователи при использовании трансляции? или он использует лучший/более эффективный метод? – Basj

+0

Это петли. Не существует более эффективного метода для трансляции соединений webSocket. Каждое соединение webSocket представляет собой собственный сокет TCP. Вы должны отправлять отдельно каждому. Именно так работает TCP. – jfriend00

ответ

1

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

socket.emit("someMsg", someData); 

И это получить:

socket.on("someMsg", function(data) { 
    // process incoming data here 
}); 

Вот неполный список возможностей socket.io добавляет поверх webSocket: Moving from socket.io to raw websockets?

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