socket.io html5 聊天,socket.io实现在线聊天页面

一.要点分析

(1) 对于socket.io,它是基于事件响应的socket,可以进行长时间的消息传递。其服务端使用的方法主要不过就是两个,on()和emit()

io.on('connetcion',function(socket) {

socket.on('event',function(data) {

/*执行相应的方法*/

//通知客户端执行事件

socket.emit('new event',{data:'mydata'});

});

});

(2)搭建好服务器端后就进行客户端连接

//引入socket

var socket = io();

socket.on('event',function(data) {

/*执行事件*/

//通知服务器端执行事件

socket.emit('new event',{data:'mydata'});

});

(3)接下来就是对视图的搭建

二.源代码和注释分析

(1) app.js:

//引入express框架

var express = require('express');

var app = express();

//服务端创建

var server = require('http').createServer(app);

//使用socket.io进行通信

var io = require('socket.io')(server);

var port = process.env.POST || 8000;

//服务开启

server.listen(port,function() {

console.log("The chatting room is running at port: " + port);

});

//使用静态文件目录

app.use(express.static(__dirname + '/public'));

//当前进入聊天室的人数

var usersNumber = 0;

//客户端通过socket链接服务端

io.on('connection',function(socket) {

//默认没有用户进入

var addUser = false;

//客户端发送新的消息

socket.on('new message',function(data) {

//广播所有在线客户端新消息的产生

socket.broadcast.emit('new message',{

userName: socket.userName,

message: data

});

});

//客户端发送有用户加入的消息

socket.on('add user',function(userName) {

if(addUser) return;

socket.userName = userName;

usersNumber++;

addUser=true;

//向客户端发送登陆成功

socket.emit('login',{

userName: socket.userName,

usersNumber:usersNumber

});

//广播有新用户加入

socket.broadcast.emit('new user join',{

userName:socket.userName,

usersNumber:usersNumber

});

});

//客户端断开链接

socket.on('disconnect',function() {

if(addUser) {

usersNumber--;

//通知所有客户端有用户离开

socket.broadcast.emit('user left',{

userName:socket.userName,

usersNumber:usersNumber

});

}

});

});

(2) main.js:

$(function(){

//创建socket与服务端链接

var socket = io();

//通过jquery获取dom节点

var $logPage = $('.logPage');

var $logList = $('.logList');

var $chatPage = $('.chatPage');

var $messageContent = $('.messageContent');

var $messageList = $('.messageList');

var $messageInput = $('.messageInput');

var $usernameInput = $('.usernameInput');

var $sendMessage = $('.sendMessage');

var $addUser = $('.addUser');

var $loginPage = $('.loginPage');

var $messageInputBar = $('.messageInputBar');

//默认当前登陆输入框为焦点状态

var $currentInput = $usernameInput.focus();

//用于记录当前的用户名

var userName;

var connect = false;

//监听服务器是否有新的消息产生,有的话就显示消息到列表

socket.on('new message',function(data) {

//在列表框中添加消息,类型为收取的消息

addNewMessage(data,2);

});

//监听服务器是否登陆成功,成功就显示成功登陆

socket.on('login',function(data) {

userLogin(data);

});

//监听服务器是否有新的用户加入,有的话就显示

socket.on('new user join',function(data) {

newUserJoin(data);

});

//监听服务器是否有用户离开

socket.on('user left',function(data){

userLeft(data);

});

function userLogin(data) {

//登陆成功,输出信息

connect = true;

$logList.empty();

$logList.append('

Name: ' + data.userName + ' is joined

');

$logList.append('

CurrentNumber: ' + data.usersNumber + '

');

}

function addNewMessage(data,state) {

if(state == 1) {

$messageList.append(

'

' + data.userName +'
'+data.message+'
');

}else {

$messageList.append(

'

' + data.userName +'
'+data.message+'
');

}

}

function newUserJoin(data) {

$logList.empty();

$logList.append('

Name: ' + data.userName + ' is joined

');

$logList.append('

CurrentNumber: ' + data.usersNumber + '

');

}

function userLeft(data) {

$logList.empty();

$logList.append('

User: ' + data.userName + ' has left

');

$logList.append('

CurrentNumber: ' + data.usersNumber + '

');

}

//当用户点击发送消息时的事件

$sendMessage.click(function(event) {

/* Act on the event */

var message = $messageInput.val();

if (message && connect) {

$messageInput.val('');

addNewMessage({

userName: userName,

message: message

},1);

socket.emit('new message', message);

}

});

//当用户点击登陆事件

$addUser.click(function(event) {

/* Act on the event */

userName = $usernameInput.val().trim();

if (userName) {

$loginPage.fadeOut();

$chatPage.show();

$messageInputBar.show();

$loginPage.off('click');

$currentInput = $messageInput.focus();

socket.emit('add user', userName);

}

});

});

(3) index.html:

* {

font-family: 'Microsoft Yahei';

}

.header {

position: fixed;

}

.content {

padding-top: 2rem;/*有顶部固定导航条时设置*/ padding-bottom: 5rem;/*有底部固定导航条时设置*/

}

.chatPage {

display: none;

}

.logPage {

background-color:#00FFFF;

border-radius: .2rem;

}

.messageInputBar {

display: none;

}

.chatItem {

}

Chatting Room

Please input your name
Login
Send

(4) 使用aui视图框架

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Node.js 和 Socket.io 实现多人聊天室的基本步骤: 1. 安装 Node.js 和 Socket.io 首先需要安装 Node.js 和 Socket.io。可以在 Node.js 官网下载并安装 Node.js,然后在命令行中使用以下命令安装 Socket.io: ``` npm install socket.io ``` 2. 创建服务器 创建一个 Node.js 服务器,并在其中引入 Socket.io 模块。创建一个 HTTP 服务器,并使用 Socket.io 将其升级为 WebSocket 服务器。 ```javascript const http = require('http'); const express = require('express'); const socketIO = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socketIO(server); server.listen(3000, () => { console.log('Server listening on port 3000'); }); ``` 3. 监听连接事件 使用 Socket.io 监听 `connection` 事件,当有新的客户端连接到服务器时,触发该事件。 ```javascript io.on('connection', (socket) => { console.log('New client connected'); }); ``` 4. 处理消息事件 在连接事件中,可以监听 `message` 事件,以接收客户端发送的消息。当接收到消息时,将其广播给所有连接到服务器的客户端。 ```javascript io.on('connection', (socket) => { console.log('New client connected'); socket.on('message', (message) => { console.log('Received message: ', message); io.emit('message', message); }); }); ``` 5. 创建客户端 创建一个 HTML 页面作为客户端,使用 Socket.io 连接到服务器,并监听 `message` 事件以接收其他客户端发送的消息。 ```html <!DOCTYPE html> <html> <head> <title>Chat Room</title> <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); socket.on('message', (message) => { const li = document.createElement('li'); li.innerText = message; document.getElementById('messages').appendChild(li); }); function sendMessage() { const input = document.getElementById('messageInput'); socket.emit('message', input.value); input.value = ''; } </script> </head> <body> <ul id="messages"></ul> <input type="text" id="messageInput"> <button onclick="sendMessage()">Send</button> </body> </html> ``` 6. 运行程序 运行 Node.js 服务器,并在浏览器中打开客户端页面。多个客户端连接到服务器后,可以在聊天室中发送消息。 这就是使用 Node.js 和 Socket.io 实现多人聊天室的基本步骤。当然,还可以添加许多其他功能,例如用户身份验证、私人消息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值