在尝试访问原始套接字io客户端实例时遇到麻烦,该实例是sails io创建的SailsSocket对象的一部分。
在我的Sails应用程序中,我可以执行以下操作来创建Sails io客户端实例:
// Require the sockets.js file if you want to be able to use the socket client to
// do things like `io.socket.get()` inside of this script.
var io = require('../dependencies/sockets.js')
// Configure the socket client
io.sails.url = 'http://localhost:1337'
io.sails.autoConnect = false
io.sails.reconnection = true
io.sails.reconnectionDelay = 3000
io.sails.reconnectionDelayMax = 7000
// Connect first so we can pass the _raw info to vue-socket-io
const socket = io.sails.connect()
我正在使用vue-socket-io,它要求在连接选项中使用套接字io客户端实例。
在Sails io客户端实例中,可以使用SailsSocket对象_raw
属性/方法进行访问:
import VueSocketIO from 'vue-socket.io'
Vue.use(new VueSocketIO({
debug: true,
connection: socket._raw,
vuex: {
store,
actionPrefix: 'SOCKET_',
mutationPrefix: 'SOCKET_'
}
}))
按预期工作。
当我尝试在Electron渲染器过程中执行相同的操作时,我得到了一些意外的行为:
...
// Connect first so we can pass the _raw info to vue-socket-io
const socket = io.sails.connect()
console.log(socket)
console.log(typeof socket._raw)
import VueSocketIO from 'vue-socket.io'
Vue.use(new VueSocketIO({
debug: true,
connection: socket._raw,
...
在这种情况下,vue-socket-io抱怨:Uncaught Error: Unsupported connection type
记录socket
显示SailsSocket对象,但是记录socket._raw
显示未定义。后者很奇怪,因为在SailsSocket对象中它显然位于其中:
我认为这是在vue-socket-io中引起连接错误的原因,但它不是相对的,控制台显示了对象的属性,但是尝试访问该属性直接显示为未定义?
有人可以帮助我了解为什么会这样吗,或者建议是什么导致我的Sails / Electron应用之间的这种差异?