black11black
V2EX  ›  问与答

Python3 本地建立 websocket 服务器,本地访问正常,手机访问异常,请问可能是什么原因导致?

  •  
  •   black11black · Jan 15, 2020 · 1272 views
    This topic created in 2334 days ago, the information mentioned may be changed or developed.

    大家好,我今天在本地做一些尝试,想把网页输入框的内容用 ws 实时推流回服务器

    后台框架 aiohttp 前端用 jquery 简单梭了一个功能测试,很高兴功能一切正常

    本地测试完成后,想测一下其他设备访问, 连接路由器,开放防火墙等等一系列操作以后,网页能加载成功,但 ws 连接失败, 本菜鸡比较懵逼,请问这可能是什么原因导致的? 有没有高手指点一下,谢谢!

    =======================================================================

    #目录结构

    /testpath
       main.py
       /templates
           hello.html
    

    非常简单的小 demo,前后端代码分别如下:

    本地测试 127.0.0.1:8080,一切功能正常 使用其他电脑连接本地 192.168.0.101 提示 wserror,疯狂异常弹窗 到底咋回事?

    ======================================================================= 附带文字代码

    import asyncio ,os ,aiohttp_jinja2 ,jinja2 ,aiohttp.web
    
    @aiohttp_jinja2.template('hello2.html')
    async def testhandle(request):
        return 
        
    async def websocket_handler(request):
        print('Websocket connection starting')
        ws = aiohttp.web.WebSocketResponse()
        await ws.prepare(request)
        print('Websocket connection ready')
    
        async for msg in ws:
            if msg.type == aiohttp.WSMsgType.TEXT:
                print(repr(msg.data))
    
        print('Websocket connection closed')
        return ws
    
    def main():
        loop = asyncio.get_event_loop()
        app = aiohttp.web.Application(loop=loop)
        aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader('./templates'))
        app.router.add_route('GET', '/', testhandle)
        app.router.add_route('GET', '/ws', websocket_handler)
        aiohttp.web.run_app(app, host='0.0.0.0', port='8080')
    
    if __name__ == '__main__':
        main()
    

    ======================================================================

    <html>
    <head>
    <meta charset="UTF-8">
    <title> Web sockets test </title>
    <script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        // ws 部分
        ws = new WebSocket("ws://127.0.0.1:8080/ws"); 
        ws.onopen = function(event){alert("已经与服务器建立了连接\r\n 当前连接状态:"+this.readyState);};
        ws.onclose = function(event){alert("已经与服务器断开连接\r\n 当前连接状态:"+this.readyState);};
        ws.onerror = function(event){alert("WebSocket 异常!\r\n 当前连接状态:"+this.readyState);};
        // 有输入时增量上传
        var last_length = 0;
        var SendData = function(){
            var current_length = $("#test").val().length;
            ws.send($("#test").val().substring(last_length,current_length));
            last_length = current_length;
        }
        // 监听输入事件
        $(document).on("input propertychange",".inp",SendData);
    </script>
    </head>
    
    <body>
        <textarea id="test" class="inp" placeholder="please input"></textarea>
    </body></html>
    
    ysc3839
        1
    ysc3839  
       Jan 15, 2020 via Android   ❤️ 1
    你该不会是网页中写死了 127.0.0.1 吧?那自然连不上呀。
    ZavierXu
        2
    ZavierXu  
       Jan 15, 2020
    @ysc3839 HHH 一针见血啊
    black11black
        3
    black11black  
    OP
       Jan 15, 2020
    @ysc3839
    233 感谢感谢

    我自己瞅了半天不知道啥毛病,还奇怪 /都刷出来了 /ws 咋出不来,睁眼瞎
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2797 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 03:55 · PVG 11:55 · LAX 20:55 · JFK 23:55
    ♥ Do have faith in what you're doing.