我正在制作一个白板应用程序:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connect', function(socket) {
socket.on('join', function(data) {
socket.join(data.room);
console.log(data.room);
});
socket.on('drawing', function(data) {
console.log(data);
io.sockets.in(data.room).emit("senddraw", data);
});
socket.on('writetext', function(data) {
console.log(data);
io.sockets.in(data.room).emit("senddraw", data);
});
socket.on('action', function(data) {
console.log(data);
io.sockets.in(data.room).emit("action", data);
});
});
http.listen(8080, function() {
console.log('listening on localhost:8080');
});
如果我在服务器上运行此 Node 脚本,我可以通过网页的本地主机副本进行连接。但是,我无法从服务器上托管的副本进行连接,因为它是通过 HTTPS 提供的。我收到错误:
polling-xhr.js:264 混合内容:位于 ***** 的页面是通过 HTTPS 加载的,但请求了不安全的 XMLHttpRequest 端点 'http://...*:8080/socket.io/?EIO=3&transport=polling&t=Lu2NoGL'。该请求已被阻止;内容必须通过 HTTPS 提供。
如何在不禁用服务器上的 ssl 的情况下解决此问题?
客户端有相当于:
//var socket = io.connect("http://localhost:8080");
var socket = io.connect("http://**.***.***.**:8080");
socket.on("connect", function(data) {
socket.emit("join", {room : "@roomid"});
});
关于绘图事件:
socket.emit("drawing", {x0 : x0, y0 : y0, x1 : x1, y1: y1, current : current, room : "@roomid"});
被选中的:
socket.on("drawing", function(data) {do blah});
最佳答案
您需要通过连接到 /
而不是 http://...*:8080< 来更改网页 JavaScript 中的
:socket.io 客户端
代码
var socket = io.connect('/');
关于Node.js、套接字、io 和 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788235/