早上好。 我使用 Socket.io 创建了一个简单的聊天服务器。在下一个屏幕中,这将是客户端界面,您可以看到一些输入
在本地主机中,在我的电脑上工作正常。以下是来自服务器的日志消息:
我使用 ubuntu 将服务器上传到 EC2 实例。它工作正常,以同样的方式
来自 EC2 服务器的日志
主要问题是当我尝试从我的计算机连接到 EC2 中的 Socket.io 服务器时。我从计算机中的客户端文件中收到此错误:
<块引用>socket.io.js:3888 获取 https://mydomain:80/socket.io/?EIO=4&transport=polling&t=NQB59WG
这是我的服务器代码:
const path = require("path");
const express = require("express");
const socketio = require("socket.io");
const app = express();
app.set('port', 3000);
//static files
app.use(express.static(path.join(__dirname, "public")));
//start the server
const server = app.listen(app.get('port'), () => {
console.log("server on port", app.get('port'));
});
const io = socketio(server);
//websockects
io.on('connection', (socket) => {
console.log("new connection " + socket.id);
socket.on('chat:message', (data) => {
console.log(data);
io.sockets.emit("chat:server", data);
});
socket.on('chat:typing', (data) => {
console.log(data);
socket.broadcast.emit("chat:typing", data);
});
});
这是我的客户端代码:
const socket = io("https://domain:80");
//dom elements
let message = document.getElementById("message");
let username = document.getElementById("username");
let btn = document.getElementById("button");
let output = document.getElementById("output");
let actions = document.getElementById("actions");
btn.addEventListener('click', function() {
console.log({
username: username.value,
message: message.value
});
socket.emit("chat:message", {
username: username.value,
message: message.value
});
});
message.addEventListener('keypress', function() {
socket.emit("chat:typing", username.value);
});
socket.on("chat:server", function(data) {
console.log(data);
actions.innerHTML = "";
output.innerHTML += "<p><strong>" + data.username + "</strong>: " + data.message + " </p>";
});
socket.on("chat:typing", function(data) {
console.log(data);
actions.innerHTML = "<p><strong>" + data + "</strong> esta escribiendo </p>";
});
这里是端口的实例入站规则:
当我尝试从我的计算机连接到 EC2 实例时,我尝试了多种连接方式,如下所示:
const socket = io("https://url.org:80");
const socket = io("https://url.org");
const socket = io("https://ipaddres:80");
const socket = io("https://ipaddres");
const socket = io("ec2-xxxx.compute-1.amazonaws.com");
const socket = io("ec2-xxxx.compute-1.amazonaws.com:80");
没有任何效果,有帮助吗?
答案 0 :(得分:0)
就我而言,解决方案是做两件事:
const socket = io("https://url.org");
访问控制允许来源:*
它奏效了