我有一个socket.io服务器(在node.js中),我正在尝试连接python客户端,主要是为我的套接字服务器提供命令行界面。
我正在使用Python的网络套接字,但是,我意识到这只支持四个“事件”:打开,关闭,出错和消息。
我的socket.io服务器定义了.on('connection')
等自定义事件。如何在python中发出/接收这样的自定义事件?
到目前为止,这是我的脚本,它只是启动和关闭,所以它不起作用。 导入Web套接字,请求,线程,时间 host ='http://socket-url-server.com'
def on_open(ws):
def run(*args):
print 'did connect'
for i in range(3):
time.sleep(1)
result = ws.recv()
print 'received:'
print result
time.sleep(1)
ws.close()
print "thread terminating..."
thread.start_new_thread(run, ())
def on_message(ws, message):
print message
def on_error(ws, error):
print error
def on_close(ws):
print "### closed ###"
print('Connecting to %s' % host)
socket = host.replace('http://', 'ws://')
print socket
websocket.enableTrace(True)
_ws = websocket.WebSocketApp(socket,
on_message = on_message,
on_error = on_error,
on_close = on_close)
_ws.on_open = on_open
_ws.run_forever()
我应该使用哪种库/方法?如果我自己握手并获取socket.io服务器密钥,那么如何在此之后发出/接收事件?
我也尝试使用https://pypi.python.org/pypi/socketIO-client,但其文档很差
我在下面为它写了下面的脚本,但我得到了No handlers could be found for logger "socketIO_client"
,它只会永远挂起。
from socketIO_client import SocketIO, BaseNamespace
class Namespace(BaseNamespace):
def on_connect(self):
print '[Connected]'
socketIO = SocketIO('http://socket-server-url.com', 80, Namespace)
socketIO.wait(seconds=1)
答案 0 :(得分:3)
我遇到了同样的问题并且自己解决了这个问题。在这里,我写了一些关于库 socketIO_client 的使用的评论,并希望它有所帮助。
开发环境:服务器/客户端:python
编写的nodejs / sio_clientFYI
[2014年2月19日] 对不起,请允许我在有关py_SIOClient的答案中附加一些评论。
示例代码如下:
class ChatNamespace(BaseNamespace):
def on_connect( self ):
print "connected."
def on_sayhello_response( self, data ):
print "response:", data
sio = SocketIO(host, port, ChatNamespace)
chatns = sio.define(ChatNamespace, '/chat')
while (1):
chatns.emit('sayhello', {'name':'John'})
chatns.wait(1)
此示例中的命令'sayhello'在重置连接时将处于非活动状态,并且不再可以访问Namespace对象聊天(也不会出现错误)。因此,可以通过在每次发送消息之前重新定义专用命名空间来解决它,因为我们不知道何时重置连接(并且在我看来并不重要)。 希望对py_SocketIO_Client工作的人有所帮助。
补充2014/09/09 因为我使用node(.js)作为后端服务器,但是这个库好像几个月都没有更新,而且它的socket.io只支持 socket.io< 1.0.0 即可。在选择此库之前,请提醒您检查您的包装版本。希望它能帮助人们像我一样面对同样的问题。