V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dai269619118
V2EX  ›  程序员

在做一个 php 的项目,需要使用 websocket 用 tornado 来实现, 遇到了问题

  •  
  •   dai269619118 · 2015-08-25 21:13:03 +08:00 · 3032 次点击
    这是一个创建于 3180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目的域名:108.com
    tornado 用 nginx 做了一个代理

    server { 
        listen  80; 
        server_name socket.108.com; 
    
        location / { 
            proxy_pass  http://127.0.0.1:8888; 
        }   
    }
    

    在前端 108.com 域名发起 websocket 我猜是跨域的问题,在同一个域名下 websocket 是没问题的,google 了也没有搜到什么具体跨域的文章

    WebSocket connection to 'ws://socket.108.com/socket' failed: Error during WebSocket handshake: Unexpected response code: 400


    问题:
    1.如果用一个域名,这样 ngixn 需要怎么配置?好像端口不一样也会出现跨域问题 这个自己倒还没试

    2.有其他 php+tornado 实现 websocket 的具体方法吗?

    第 1 条附言  ·  2015-08-26 09:38:45 +08:00
    问题已经解决 谢谢
    -------------
    nginx 配置没配置好,这个解决了 400 错误
    '''
    location / {
    proxy_pass http://127.0.0.1:8888;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    }
    '''
    添加好配置后发现还是报错 403
    参考: http://stackoverflow.com/questions/24851207/tornado-403-get-warning-when-opening-websocket
    11 条回复    2015-08-26 14:20:53 +08:00
    manhere
        1
    manhere  
       2015-08-25 21:42:17 +08:00   ❤️ 1
    没看出和 php 有什么关系啊
    lbp0200
        2
    lbp0200  
       2015-08-25 21:51:46 +08:00   ❤️ 1
    请看 http 协议和 tcp 协议的区别, websocket 是纯 tcp 协议
    barbery
        3
    barbery  
       2015-08-25 21:56:10 +08:00   ❤️ 1
    websocket 没有跨域。。。。
    openroc
        4
    openroc  
       2015-08-25 21:58:25 +08:00   ❤️ 1
    server {
    listen 80;
    server_name oo.xx.com;

    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forward-For $remote_addr;
    proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forward-Proto $scheme;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    location / {
    proxy_pass http://ooxx_6969;
    }
    }
    dai269619118
        5
    dai269619118  
    OP
       2015-08-25 22:17:49 +08:00
    @lbp0200 谢谢 好的
    @barbery 我再看看程序的问题
    @openroc 谢谢 能说下大概这配置实现的意思吗
    lvfujun
        6
    lvfujun  
       2015-08-25 22:21:54 +08:00
    @dai269619118 楼主一看就是被网上的教程骗了。
    qiayue
        7
    qiayue  
       2015-08-25 22:23:49 +08:00
    108.com 这个域名要七八位数吧
    sunmonster
        8
    sunmonster  
       2015-08-25 22:44:49 +08:00   ❤️ 1
    请参见 nginx websocket 文档 http://nginx.org/en/docs/http/websocket.html
    hellogbk
        9
    hellogbk  
       2015-08-25 23:25:56 +08:00   ❤️ 1
    websocket 在目前来看还是一个坑啊。 经常不得不 fallback 到 long polling 下面去。
    websocket 的可用性跟浏览器兼容性还有用户的网络环境有很大关系。
    ws 的成功率没有 wss 高。
    dai269619118
        10
    dai269619118  
    OP
       2015-08-25 23:47:55 +08:00
    @qiayue 大哥是本地重定向的。。。
    openroc
        11
    openroc  
       2015-08-26 14:20:53 +08:00
    @hellogbk 目前用 node 的 websocket 还凑合, 网络关系比较大,没测过高并发下情况。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1042 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:36 · PVG 03:36 · LAX 12:36 · JFK 15:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.