我正在尝试通过向服务器发送自定义事件,使用Socket.io 0.7让Python客户端与Node.js服务器通信.
基于我在GitHub上找到的Socket.io引用,以及下面的WebSocket Python库.
到目前为止,这是我的代码:
节点服务器
io.sockets.on('connection', function (socket) {
socket.on('newimg', function(data) {
console.log(data);
});
});
Run Code Online (Sandbox Code Playgroud)
Python客户端
def handshake(host, port):
u = urlopen("http://%s:%d/socket.io/1/" % (host, port))
if u.getcode() == 200:
response = u.readline()
(sid, hbtimeout, ctimeout, supported) = response.split(":")
supportedlist = supported.split(",")
if "websocket" in supportedlist:
return (sid, hbtimeout, ctimeout)
else:
raise TransportException()
else:
raise InvalidResponseException()
try:
(sid, hbtimeout, ctimeout) = handshake(HOSTNAME, PORT) #handshaking according to socket.io spec.
Except Exception as e:
print e
sys.exit(1)
ws …Run Code Online (Sandbox Code Playgroud) 我正在构建一个实时Web应用程序.我希望能够从我的python应用程序的服务器端实现发送广播消息.
这是设置:
我可以成功地将socket.io消息从客户端发送到服务器.服务器处理这些并可以发送响应.在下面我将描述我是如何做到的.
首先,我们需要定义一个处理socket.io事件的Connection:
class BaseConnection(tornadio2.SocketConnection):
def on_message(self, message):
pass
# will be run if client uses socket.emit('connect', username)
@event
def connect(self, username):
# send answer to client which will be handled by socket.on('log', function)
self.emit('log', 'hello ' + username)
Run Code Online (Sandbox Code Playgroud)
启动服务器是由Django管理自定义方法完成的:
class Command(BaseCommand):
args = ''
help = 'Starts the TornadIO2 server for handling socket.io connections'
def handle(self, *args, **kwargs):
autoreload.main(self.run, args, kwargs)
def run(self, *args, **kwargs):
port = …Run Code Online (Sandbox Code Playgroud) 我们目前有一个 django 应用程序,通过 Apache 为用户提供我们的前端网站。前端查询我们的后端,这是一个单独的 Python 应用程序 (Flask),服务于不同的服务器。到目前为止,前端需要向后端查询数据,但反之则不然。
我们现在推出数据警报,用户可以选择接收有关系统中数据更改的数据警报。检查警报是否发生的过程必须发生在后端,因为它与数据模型紧密耦合。因此,前端发送请求以在后端添加警报,然后后端将轮询并检查触发器是否已发生。
问题是,一旦后端触发警报,前端就需要收到通知,以便用户也收到通知。后端无法直接向用户发出警报,因为它不知道电子邮件等用户数据(该用户数据可能会发生变化,因此将其与添加警报的请求一起发送到后端过于简单)。
因此,我们正在寻找将警报通知从后端推送到前端的最佳方法。我们这样做的最佳方法是什么?我们可以在 django 应用程序上设置一个后端可以查询的视图,但我不喜欢前端查询后端的想法以及相反的方式。实现这一目标的最佳选择是什么?