默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教基于WebSocket的IM部署到Nginx的访问问题
阅读(24269) | 评论(6 收藏 淘帖
最近有把im部署到linux  然后通过nginx代理实现访问,请问报错为:
WebSocket connection to 'ws://xxx.xxx.xxx.xxx:8008/webim/websocket/216' failed: Error during WebSocket handshake: Unexpected response code: 404
websocket.onerror @ (index):980

是什么原因?

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

推荐方案
评论 6
Websocket是基于TCP写的,Websocket相当于富客户端应用里的tcp、udp长连接,它并不是像http这种短连接一样,简简单单就用nginx实现了负载均衡。

建议你把网络编程相关的基础知识学习一下,比如《TCP/IP详解这本书》,你可能对这种长连接的理解并不太熟悉
引用:JackJiang 发表于 2018-07-16 14:48
Websocket是基于TCP写的,Websocket相当于富客户端应用里的tcp、udp长连接,它并不是像http这种短连接一样 ...

手机端的可以设置ip和udp端口号,websocket是不是也有类似的设置
引用:JackJiang 发表于 2018-07-16 14:48
Websocket是基于TCP写的,Websocket相当于富客户端应用里的tcp、udp长连接,它并不是像http这种短连接一样 ...

那我们这种nginx是不是就不能实现长连接了
引用:xushuhua 发表于 2018-07-16 15:42
那我们这种nginx是不是就不能实现长连接了

理论上是这样的。你了解一下Nginx为什么能实现http的负载原理,就知道为什么对于长连接来说很困难了。

不过最新的nginx据说已经有可以支持Websocket的组件了,你可以查查相关资料,不过,在此之前,你最好理解一下Nginx的原理,以及长连接对于Nginx来说的局限性,不然你即使弄出来的,出了问题也是理解不了的
nginx配置文件:nginx.conf


http {

    // ...省略

    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

    server {

            listen       3102;  #监听3102
            server_name localhost;

        location / {
            proxy_pass http://localhost:3100; #代理3100

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

    // ...省略
}
楼上正解,我也这么配置的
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部