Python "pywbsocket" Сервер веб-сокета HTML5 Конфигурация Проблема? - PullRequest
2 голосов
/ 07 октября 2011

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

def web_socket_transfer_data(request):
    count = 0
    while (count < 1):
    line = request.ws_stream.receive_message()
    print line
    request.ws_stream.send_message(line)  

Он отлично работает с одной веб-страницей, но если я использую два клиента (подключение двух веб-страниц к одному и тому же серверу сокетов через одни и те же порты), скрипт работает одинаково.

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

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

Пожалуйста, помогите ...

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

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

Вот как вы можете добавить каждое соединение в список и передать его всем.Конечно, я настоятельно рекомендую иметь код для обработки мертвых и / или закрытых соединений, а также для удаления их из списка, я просто собираюсь дать общую идею здесь (тем более, что я не программировал в Python для некоторыхлет. Я основал этот фрагмент кода на примере кода pywbsocket, поэтому он отличается от вашего. Обратите внимание, что я вообще не рассматривал безопасность потоков, что должно быть проблемой)

connections = []

def web_socket_do_extra_handshake(request):
    connections.append(request);
    pass

def web_socket_transfer_data(request):
    while True:
        line = msgutil.receive_message(request)
        for connection in connections[:]:
            msgutil.send_message(connection, line)
        if line == "Bye":
            return
0 голосов
/ 22 ноября 2013

Проблема в том, что переменная соединения сбрасывается при каждом новом вызове, я думаю.

Итак, я изменил код для инициализации переменной соединений, только если она еще не определена:

try:
    connections
except: 
    connections = []

Теперь он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...