我对web服务器/ node.js / socket.io非常陌生,我正在尝试创建一个非常简单的网站,只是为了学习如何连接两个人。我找到的所有教程都教你如何在本地主机上运行你的应用程序,但我想在服务器上运行它,这样每个人都可以访问它。
我找到了这个托管网站- Zeit-Now -并设法将我的网站放到了网上。我的网站在本地主机上运行得很好,但当我把它放到网上时,它就不能工作了。我认为问题出在我的代码中的这两行代码中,“?”是。
index.html:
<!DOCTYPE html>
<html>
<head>
<title>A2</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
</head>
<body>
<input id="sendMsg" type="text" placeholder="TYPE TO SEND">
<input id="receiveMsg" type="text" placeholder="RECEIVE HERE">
<button id="sendBtn">Send</button>
<script>
var socket = io.connect('https://web-socket-2.quaei.now.sh/');
var sendMsg = document.getElementById('sendMsg');
var receiveMsg = document.getElementById('receiveMsg');
var sendBtn = document.getElementById('sendBtn');
// Emit events
sendBtn.addEventListener('click', () => {
socket.emit('chat', {
message: sendMsg.value
});
});
// Listen for events
socket.on('chat', data => {
receiveMsg.value = data.message;
});
</script>
</body>
</html>index.js:
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
app.use(express.static('public'));
io.on('connection', socket => {
console.log('Connection! ->', socket.id);
socket.on('chat', data => {
io.sockets.emit('chat', data);
});
});我也尝试过:
var socket = io.connect(https://web-socket-2.quaei.now.sh/);和
var server = app.listen(80, https://web-socket-2.quaei.now.sh/);我希望我的网站能够读取第一个输入域中的内容,并在单击send时将其输出到第二个输入域中(这在localhost上运行良好),但当我使用Zeit-Now将其放到网上时,它就不起作用了。
编辑:
now.json:
{
"version": 2,
"name": "web-socket-2",
"builds": [{
"src": "public/**/*",
"use": "@now/static"
},
{
"src": "*.js",
"use": "@now/node"
}
],
"routes": [{
"src": "/",
"dest": "public/index.html"
}]
}我有一个包含now.json、index.js和public文件夹的#websocket-2文件夹。在public文件夹中,我有index.html。
我怎样才能让它在这个网站上工作:https://web-socket-2.quaei.now.sh/?
发布于 2019-06-11 13:27:00
我猜你现在面临的问题是你想直接在网站上运行服务器。但是它需要像这样的节点运行:node index.js。
因此,您需要像访问ssh一样访问服务器,然后使用上面指定的命令在那里启动它。根据日志,我可以说客户端找不到服务器。
您还需要确保它解析为正确的路径。
使用app.listen(80)启动它,然后尝试连接到https://web-socket-2.quaei.now.sh:80
发布于 2019-06-11 14:29:16
尝尝这个
const app = express();
常量服务器= http.createServer(app);
const io =socketio(服务器);
server.listen(80,'0.0.0.0');
发布于 2019-06-11 23:29:30
确保您的服务器启用了websockets。(它实际上并不需要websockets,但为了更好的传输,它将尽可能使用websockets)
在阅读有关zeit.co的文章时,我可以看到它们不支持websockets,也不确定它们是否支持sucket。如果下面的代码对你没有帮助,我建议你用电子邮件联系他们确认这一点。
要在客户端运行连接,请在安装了socket.io-client之后或在头文件中包含脚本之后。
您只需使用io.connect('SERVER URL')进行连接,它将返回您的socket连接实例。(如果在同一台服务器上运行,则不需要通过服务器)
const socket = io.connect('http://youserver.com');
// You can listen to conenct and disconnect to track your connection
socket.on('connect', socket => {
console.log('Connected', socket.id);
});在客户端就是这样。
在服务器端,您需要将服务器传递给socket.io模块
const io = require('socket.io')(server);
// You can listen to your socket connecting through connect and disconnect
io.on('connect', (socket) => {
console.log('socket connected', socket);
});你可以在客户端使用'error‘事件跟踪你的错误,并确保检查你的控制台以查看有关连接的日志。
如果您使用的是express server,而socket在控制台中引发了404错误,请确保您使用http而不是express启动服务器。
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
// your socket and routes
server.listen(process.env.PORT || 3500, () => {
console.log(`Localhost working on ${process.env.PORT || 3500}`);
}https://stackoverflow.com/questions/56536881
复制相似问题