Конвертировать клиентский сервер Python в веб-сокет - PullRequest
1 голос
/ 10 февраля 2012

Я создаю простой эхо-сервер и хотел бы использовать его для простого примера веб-сервера.

До сих пор у меня есть сервер:

Server.py

from socket import *
import threading
import thread

def handler(clientsock,addr):
    while 1:
        data = clientsock.recv(BUFSIZ)
        if not data:
            break
        msg = 'echoed:... ' + data
        clientsock.send(msg)
     clientsock.close()

if __name__=='__main__':
    HOST = 'localhost'
    PORT = 21567
    BUFSIZ = 1024
    ADDR = (HOST, PORT)
    serversock = socket(AF_INET, SOCK_STREAM)
    serversock.bind(ADDR)
    serversock.listen(2)

    while 1:
        print 'waiting for connection...'
        clientsock, addr = serversock.accept()
        print '...connected from:', addr
        thread.start_new_thread(handler, (clientsock, addr))

Я хотел бы использовать websockify, и я обнаружил, что он может обернуть существующую программу, используя:

./websockify 2023 -- PROGRAM ARGS

Как запустить предыдущий сервер, используя приведенный вышекоманда? Можно ли запустить websockify на одном компьютере, в то время как server.py работает на другом компьютере?Если да.Как мне изменить приведенную выше команду?

Может ли кто-нибудь предоставить простой пример HTML5, чтобы показать мне, как должен выглядеть client.html?Помните, что я хочу использовать этот пример с браузерами, которые не имеют встроенной поддержки веб-сокетов.Я думаю, что websockify может сделать это, используя web-socket-js.

Они заявляют: It has transparent support for binary data and has automatic fallback to the web-socket-js Flash Websocket shim/polyfill if the browser does not support WebSockets natively

1 Ответ

2 голосов
/ 10 февраля 2012

Для взаимодействия с websockify я рекомендую вашему клиенту HTML / Javascript использовать библиотеку, предоставляемую include / websock.js. websock.js API немного отличается от стандартных WebSockets.

Я только что вставил очень страницу простого HTML-клиента в репозиторий websockify.

Чтобы обернуть ваш server.py в той же системе, вы должны запустить websockify следующим образом:

./websockify --web ./ 21567 -- server.py

Загрузить простой клиент с "http://localhost:21567/tests/simple.html". Enter" ws: // localhost: 21567 "какURI websocket и нажмите connect. Обратите внимание, что в режиме обтекания необходимо создать rebind.so, который перемещает порт прослушивания в сторону, чтобы websockify мог вставить его для вас.

Вы также можете запустить websockify отдельнов той же системе:

./server.py
./websockify --web ./ 6080 localhost:21567

В этом случае вы перейдете к «http://localhost:6080/tests/simple.html"» и будете использовать «ws: // localhost: 6080» в качестве URI для подключения.

Если вы хотите запустить websockify на компьютере, отличном от того, на котором работает server.py, вам потребуется изменить server.py для прослушивания открытого интерфейса, а не только «localhost».После внесения этого изменения, если server.py работает на 192.168.1.7, вы можете запустить websockify на 192.168.1.5 следующим образом:

На 192.168.1.7 запустить server.py:

./server.py

В 192.168.1.5 запустите websockify и укажите его на server.py в другой системе:

./websockify --web ./ 6080 192.168.1.7:21567

Затем перейдите к «http://192.168.1.5:6080/tests/simple.html" и используйте URI» ws: //192.168.1.5:6080 ".

В качестве альтернативы, если вы просто хотите, чтобы ваш сервер был сервером WebSocket, вы можете просто использовать библиотеку websocket.py без полной функциональности websockify и напрямую настроить свой сервер. См. Тесты /echo.py пример, включенный в websockify, который является простым эхо-сервером WebSocket.

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