我无法在生产中连接到socket.io.它在我的开发服务器中工作正常,但我没有得到#34; websocket用户连接"生产中控制台中的消息,我的热图不会填充测试数据。我在浏览器jscript控制台中获取了net :: ERR_CONNECTION_TIMED_OUT。
来自服务器:
io.origins('http://example.com/path:8080')
app.get('/somepath', function (req, res, next) {
// code here
io.emit('update', data)
console.log('update has been emitted') // this prints and I see the data object in the console
res.end("OK")
})
io.on('connection', function (socket) {
console.log('websocket user connected')
});
来自角度控制器的:
$http.get('http://example.com/somepath?'+str) // hits somepath with test data in query string 'str'
来自/ path:中的脚本的
var socket = io('http://example.com:8080');
我还在页面/路径
中包含了cdn for socket.io<script src="https://cdn.socket.io/socket.io-1.3.2.js"></script>
答案 0 :(得分:1)
问题是我必须在开发服务器的URL中包含端口号,但如果我在生产服务器中使用该端口,它将不会建立连接。我不确定为什么会这样,但我想这个端口隐含在我的浏览器的请求中,并且如果明确说明,可能关于该格式的某些内容使其无法识别。
我所做的改变:
我从服务器上删除了io.origins语句,因为socket.io的默认设置是允许任何原点。这消除了一个可能的错误来源。
我从角度控制器中的$ http.get()中删除了端口号,并在另一个脚本中更改了var socket = io('http://example.com:8080') to var socket = io('http://example.com')