服务器端代码:
const http = require("http");
const host = 'localhost';
const port = 8000;
const { Server } = require("socket.io");
// creating the server and starting it on port 8000
const server = http.createServer();
server.listen(port, host, () => {
console.log(`Server is running on http://${host}:${port}`);
});
// making io object
const io = new Server(server);
// listening to connections to the server
io.on('connection', (socket) => {
console.log('a user connected');
});
// listening on port 8000
server.listen(8000, () => {
console.log('listening on *:8000');
});
// chat message coming to server
socket.on("details", (chatBundle) => {
console.log(chatBundle);
});
客户端代码:
<!DOCTYPE html>
<html>
<body>
<h1>CHAT ROOM</h1>
<form onsubmit="return sendServer()">
<label for="name">Name:
<input id="name" name="name" type="text">
</label>
<label for="text">Message:
<input id="text" name="text" type="text">
</label>
<input type="submit" id="send" >
</form>
<script src="/Users/chanson/node_modules/socket.io/client-dist/socket.io.js">
</script>
<script>
function sendServer(){
var sender = document.getElementById("name");
var text = document.getElementById("text");
var tempArray = [sender, text]
socket.emit(chatmsg, tempArray)
};
</script>
</body>
</html>
目标:使聊天信使,将工作在相同的计算机浏览器+端口.例如,Firefox端口用户可以沟通到Chrome,Edge,Opera和Safari.(请不要问为什么我有这么多的浏览器).
2条答案
按热度按时间xoefb8l81#
我不喜欢您导入套接字客户端的方式,请执行以下操作
之后,您必须示例化tour套接字,如下所示:
确保事件名称为字符串ex,如下所示:
chatMessage
cu6pst1q2#
客户端错误(3)
1.尚未定义
chatmsg
或为其指定值socket
尚未创建或分配给变量sendServer
返回undefined
,而不是false
,因此在按下提交按钮时不会阻止表单提交。(在提交事件中调用event.preventDefault
是一种更现代的阻止提交的方法)。解决以下注意事项的脚本元素:
服务器端错误(多个)
1.* * 无应用程序**。
必须从服务器提供客户端页面,以便使用套接字与之通信-如果使用
file://
协议加载客户端页面,然后尝试使用socket.io与本地主机服务器通信,则会生成CORS错误。1.可以设置一个简单的静态express服务器来处理
http://localhost:8000/client.html
请求。src
attribute of the client side script tag. A client tag used in testing was但将取决于服务器目录结构,并且可能取决于所使用的
socket.io.js
的版本。创建http服务器时,应用程序作为参数提供。
1.在用于测试的
socketIO
版本中,要求socket.io
返回一个函数,调用该函数以生成套接字服务器。请检查文档以验证更高版本是否返回具有Socket
属性的导出对象。(请参阅答案底部的注解)1.* * 套接字消息侦听**
这是错误的位置-
server
是提供给io.on("connection", handler)
处理函数的参数,并且侦听由建立连接的用户生成的套接字事件应在连接处理函数的函数范围内进行。测试中使用的代码
socket
仍提供给连接处理程序。Server
是从socket.io
包 * 导入 * 的,这在CommonJS包中无法完成,因为不支持import
语句。Server
构造函数(或类对象),则可能需要进一步调查。import
函数(非关键字)导入ECMAScript模块,但导入操作是异步的。有关详细信息,请参阅How to use ES6 modules CommonJS。