【问题标题】:socket.io emit all clients not emitting over SSLsocket.io 发出所有不通过 SSL 发出的客户端
【发布时间】:2018-01-15 16:48:02
【问题描述】:

我已经设置了正常的 socket.io:

客户:

import io from 'socket.io-client'
const socket = io()
socket.on('connect', () => {
  console.log('connected')
  socket.emit('message', 'I have connected')
})
socket.on('message', (msg) => console.log(msg))

服务器:

import socket from 'socket.io'
const io = socket(/* httpsServer */)
io.on('connection', (socket) => {
  console.log('new connection')
  socket.on('message', (msg) => console.log(msg))
  socket.emit('message', 'This works!')
  io.sockets.emit('message', `This doesn't!`)
})

由于某种原因,通过 http 而不是 https 完美地向所有作品发送。通过 https io.sockets.emit 似乎不起作用。我错过了什么吗?

【问题讨论】:

  • 检查文件,如果你有带有http链接而不是https的文件,它会给你一个混合内容错误。如果您使用 SSL/HTTPS,则不能在页面上同时使用 http 和 https 文件。阅读更多:developer.mozilla.org/en-US/docs/Web/Security/Mixed_content/…
  • @Jer 都是 SSL。当你发射到一个套接字时它起作用,而不是当你发射到所有时。会不会是命名空间问题?
  • 您的控制台有错误吗?这可能是一个命名空间问题,但我不确定。
  • 没有错误。如果我在服务器上的socket:connection 之后执行Object.keys(io.sockets.sockets),我会得到一个空数组。但是,如果我执行setInterval 几秒钟,然后 `socket.emit 客户端会收到消息,所以它仍然连接并且可以工作。是否有任何理由不存储套接字的引用?

标签: socket.io


【解决方案1】:

检查同一套接字服务器模块未安装到 httpServerhttpsServer

我将我的套接字服务器包装在一个模块中,并首先将其连接到 https 服务器,然后再连接到 http 服务器。这就是为什么单个套接字会连接但随后向所有人发出尝试仅发送到 http 套接字的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2019-07-04
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多