我试图实现如下所示,但我面临两个问题。
我无法将 io 对象暴露给我从npm socket.io-client库获取的客户端,当它安装在meteor服务器中并尝试通过添加下面显示的脚本标记在客户端访问时
但是,我通过从cdnjs库中获取io对象来解决它。
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
2.尝试从客户端连接到服务器套接字时获取CORS错误。 客户端不在流星项目中,它是与html和js文件不同的应用程序。
client.js(不在meteor中的文件)文件
var socket = io('http://localhost:3000');
server.js(meteor中的文件)文件
import socket_io from 'socket.io';
Meteor.startup(() => {
const server = http.createServer();
const io = socket_io(server);
});
任何线索都将不胜感激,谢谢!
答案 0 :(得分:0)
我无法将io Object暴露给我从npm socket.io-client库获取的客户端,当它安装在meteor服务器中并尝试通过添加如下所示的脚本标记在客户端访问时。
请改用包装程序包:https://atmospherejs.com/joncursi/socket-io-client
尝试从客户端连接到服务器套接字时出现CORS错误。
按照此处的说明修复CORS错误:https://enable-cors.org/server_meteor.html
答案 1 :(得分:0)
我已经修复了问题并使流星插座连接到客户端(基本的html,javascript)。实施如下所示。
Meteor Server Side
<强> Main.js 强>
import http from 'http';
import socket_io from 'socket.io';
var port = 3030;
const server = http.createServer();
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
const io = socket_io(server);
Meteor.startup(() => {
socket_operation(io);
});
var socket_operation = Meteor.bindEnvironment((io) => {
io.on('connection', Meteor.bindEnvironment((socket) => {
.....
your code goes here
.....
}
));
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
console.log('Socket server listening on ' + bind);
}
客户端
<强> Main.js 强>
var socket = io('http://path/to/meteor/server:3030');
<强>的index.html 强>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
<script src="http://localhost:3000/chatbox/main.js"></script>
答案 2 :(得分:0)
服务器/ main.js 强>
import { Meteor } from 'meteor/meteor';
import { WebApp } from 'meteor/webapp';
import io from 'socket.io';
const { httpServer } = WebApp;
Meteor.startup(() => {
io(httpServer);
})
<强>的客户机/ main.html中强>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('connect', () => {
console.log('connect')
});
socket.on('event', (data) => {
console.log('event', data)
});
socket.on('disconnect', () => {
console.log('disconnect')
});
</script>
</body>