首页 > 解决方案 > 使用 socket.io 连接 Node.js 和 Python

问题描述

简短的

我正在尝试连接 Node.js [客户端] 和 Python [服务器]。Python 服务器仅支持 WebSocket,其中 Node.js socket.io 正在尝试使用长轮询设置传输:[websocket]。在所有设置之后,我没有得到任何数据,并且 node.js socket.io 一直在尝试重新连接到服务器.

要求

Python 和 Node.js 通过 websocket. 相互连接,其中 Node.js 是客户端,Python 是服务器端。

代码

  1. Python

    # IMPORT'S
    import asyncio # core: python async-await library.
    import string # core: python string manipulatation library.
    import json # core: json library.
    import pydash # pip: utility module.
    from starlette.applications import Starlette # pip: http framework.
    from starlette.responses import JSONResponse # pip: http response handler.
    from starlette.websockets import WebSocket # pip: websocket library.
    import uvicorn # pip: server runner.
    
    # SYSTEM IMPORT'S
    from system import Connect # system: load engine connection.
    from www.template import Template # system: route template loader
    
    # ENGINE: STARLETTE
    App = Starlette()
    App.debug = True
    
    # GLOBAL'S
    _port = 8000
    _host = '0.0.0.0'
    
    # HANDLER: APP
    """
    Details: Allow's external connection to interact
    with system core.rightnow socket connection can
    be made.
    """
    class App:
       def __init__(self, scope):
           assert scope['type'] == 'websocket'
           self.scope = scope
    
       async def __call__(self, receive, send):
          # load and accept socket.io connection.
          _WebSocket = WebSocket(self.scope, receive=receive, send=send)
          await _WebSocket.accept()
    
          # local variable's.
          _templateName = _WebSocket.query_params['name']
    
          # only proceed if templateName is defined.
          if _templateName:
             # send json response to client.
             await _WebSocket.send_json({ 'templateReply': 'RecivedData' }, mode= 'binary')
    
        # close socket connection.
        await _WebSocket.close()
    
      # return none. as application is
      # run on socket.
      return None
    
    # SERVER RUN
    if __name__ == '__main__':
      # run server.
      uvicorn.run(App, host= _host, port = _port)
    
  2. 节点.js

    // if _user information found than do login verification. else do
    // refresh @Cr for user information.
    // if _BroadCast contains data set.
    let _io = IO.connect('http://localhost:8000', {
      'path': '/chat',
      'transports': ['websocket'],
      'query': {
        'name': 'monk',
        'POST': 'dotsinspace@gmail.com'
      }
    })
    
    _io.on('connection', async () => {
       console.log('connected to user....') // log: nothing
    })
    _io.on('reconnecting', (__connection) => {
       console.log(__connection) // log: 2, 3 etc....
    })
    
  3. 结果 套接字响应

标签: node.jspython-3.xsocketswebsocketsocket.io

解决方案


推荐阅读