Socket.IO聊天室

小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~

Socket.IO聊天室

简介:Socket.IO实现了实时双向的基于事件的通讯机制。旨在让各种浏览器与移动设备上实现实时app功能,模糊化各种传输机制。
下面我们使用Node.js和Socket.IO来做一个简单的聊天室。
一、初始化项目

(这个是在实验楼网站的虚拟平台需要实现的~可自动略过这一环节,不需要也可以的哈)

打开虚拟机终端,新建一个文件夹socketio,进入此文件夹使用npm初始化项目:

$ npm init

然后输入项目相关信息,也可以不输入,直接一路回车,完成后会在此目录下生产一个package.json文件。这个文件用于描述项目相关信息,以及声明项目中所使用的模块。
然后安装Socket.IO:

$ npm install socket.io --save

安装Socket.IO的时候,--save参数用于保存模块依赖信息到package.json文件,安装完后,打开package.json文件会看到里面多了一项内容:

"dependencies": {    "socket.io": "^1.2.1"}

同时Socket.IO安装在了node_modules文件夹下。
二、创建http server

安装Socket.IO模块,我们现在先来创建一个可访问的页面吧。
在文件夹socketio中新建index.js文件,这就是在服务端运行的主文件。
首先在index.js中添加如下代码,引入所需的模块:

var http = require(‘http‘);           // http 模块,用于创建http server
var socketio = require(‘socket.io‘);  // socket.io 模块
var fs = require(‘fs‘);               // fs 模块,用于读取文件

然后通过http模块创建app,在index.js文件中添加代码:

// http.createServer()方法用于创建http server// 以处理来自浏览器的请求
var app = http.createServer(function(req, res) {    
// fs.readFile()方法用于读取文件
    // 此处读取的是index.html文件
    // 也就是我们后面要编写的HTML页面文件
    fs.readFile(__dirname + ‘/index.html‘, function (err, data) {        
    if (err) {
            res.writeHead(500);            
            return res.end(‘Error loading index.html‘);
        }
        res.writeHead(200); // 返回请求状态码
        res.write(data);    // 返回读取到的内容给浏览器
        res.end();
    });
}).listen(8080); 
// listen()方法用监听http server到指定的地址和端口,默认地址是localhost

在文件夹socketio中新建index.html文件,代码如下:

<!doctype html><html>
    <head>
        <meta charset="utf-8">
        <title>Socket.IO chat</title>
    </head>
    <body>
        Hello, shiyanlou.    </body></html>

运行程序:

$ node index.js

然后打开虚拟机中的浏览器,访问“127.0.0.1:8080”浏览器页面中出现“Hello, shiyanlou.”,说明创建的http server成功了。
三、实现聊天

下面我们就来创建Socket.IO对象吧:

// 在与app相同的地址和端口上创建Socket.IO服务
var io = socketio(app);// 监听connection事件
// 当浏览器连接到此Socket.IO服务时触发该事件
io.on(‘connection‘, function (socket) {    
// 监听浏览器端的chat事件
    socket.on(‘chat‘, function (data) {        
    console.log(data);
    });
});

这里在服务器端监听了来自浏览器的chat事件,后面我们会在index.html中实现此事件。
先来实现一个简单聊天界面吧,修改index.html文件中的代码如下所示:

<!doctype html><html>
    <head>
        <meta charset="utf-8">
        <title>Socket.IO chat</title>
        <style>
            * { margin: 0; padding: 0; box-sizing: border-box; }
            body { font: 13px Helvetica, Arial; }
            #form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
            #form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
            #form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
            #messages { list-style-type: none; margin: 0; padding: 0; }
            #messages li { padding: 5px 10px; }
            #messages li:nth-child(odd) { background: #eee; }
        </style>
        <!-- 引入socket.io库和jQuery库 -->
        <script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
        <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    </head>
    <body>
        <!-- 显示消息记录 -->
        <ul id="messages"></ul>

        <!-- 消息发送框 -->
        <div id="form">
            <input id="m" autocomplete="off" /><button id="send">Send</button>
        </div>
    </body></html>

然后在浏览器端创建chat事件,在index.html文件中添加如下JavaScript代码:

<script>// 连接到Socket.IO服务器var socket = io.connect();

$(function() {    // 绑定发按钮发送消息的事件
    $(‘#send‘).on(‘click‘, function() { 
           var data = $(‘#m‘).val(); 
         // 创建chat事件并发送消息给服务器
        // emit(‘event‘) 表示发送了一个event命令
        // 使用io.on(‘event‘)接收对应事件的信息
        // 所以客户端服务器端需要使用socket.on(‘chat‘)接收聊天信息
        socket.emit(‘chat‘, { msg: data });
        $(‘#m‘).val(‘‘);
    });
});</script>

现在运行项目:

$ node index.js

使用虚拟机中的浏览器访问“127.0.0.1:8080”,通过聊天框发送消息,会看到服务器端会打印出相应消息内容。
下面我们来实现把用户发送的消息发送给所有客户端,在index.js文件中创建sendmsg事件:

io.on(‘connection‘, function (socket) {
    socket.on(‘chat‘, function (data) {    
        console.log(data);    
            // 创建sendmsg事件并把发送聊天消息给客户端
        io.emit(‘sendmsg‘, data);
    });
});

客户端接收并显示消息,在index.html中添加JavaScript代码:

$(function() {    // ...

    // 接收消息并显示到消息记录框中
    socket.on(‘sendmsg‘, function(msg) {
        $(‘#messages‘).append($(‘<li>‘).text(msg.msg));
    });
});

再重新运行项目:

$ node index.js

现在用浏览器打开多个页面,就能看到别人发送的消息了,这样一个简单的实时聊天室就实现了。
当然,你可以自己扩展这个项目,做一个功能更加完整的聊天室。
此项目主要用到了Socket.IO的emit()方法和on()方法,emit()方法用于创建和触发事件,on()方法用于监听事件。


更多详细步骤及内容请登录http://www.shiyanlou.com/courses/?course_type=project&tag=all

有更多基础课、项目课欢迎大家登陆实验楼官方网站http://www.shiyanlou.com
现在登陆实验楼更有感恩好礼相送http://www.shiyanlou.com/huodong/thanks.html

时间: 2024-08-24 14:05:20

Socket.IO聊天室的相关文章

nodejs+socket.io聊天室

nodejs+socket.io 聊天室 Node.js v0.12.6 Socket.io v1.3.5 RequireJS v2.1.18 Materialize v0.97.0 聊天室演示地址 项目地址 版权声明:本文为博主原创文章,未经博主允许不得转载.

Python Socket 编程——聊天室示例程序

原文:Python Socket 编程--聊天室示例程序 上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的例子,就是允许多个人同时一起聊天,每个人发送的消息所有人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.如下图: 图来自:http://www.ibm.com/de

基于Node.js + Web Socket 简易聊天室

本文案例环境为mac系统,你需要先安装nodejs,方法比较简单,直接去nodejs官网下载即可. 环境: mime 首先通过npm进行安装 在我们的项目文件夹下打开命令行(tip: 按住Shift同时右击,可以在右键菜单中找到'从此处打开命令行'选项) 在命令行中输入 npm install mime --save 回车进行安装 然后在chat.js中通过require('mime')将其引入到项目中进行使用 mime是node.js中管理路由响应请求的模块,根据请求的URL返回相应的HTML

字节码学院之Java socket 控制台聊天室

学了个把月基础,终于写出了一个双工通信的控制台版本的聊天室了,废话不说啦,直接上代码:服务端代码 package com.zijiemaedu.socketdemo; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * @author: Mr-zhang * @create: 2019-05-30 09:48 * @emall: [email

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

Python Socket 简单聊天室2

上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # -*- coding:utf-8 -*- import SocketServer class  mysocketclass(SocketServer.BaseRequestHandler):     def handle(self):         client_inform

Java Socket 多线程聊天室

本来这次作业我是想搞个图形界面的,然而现实情况是我把题意理解错了,于是乎失去了最初的兴致,还是把程序变成了功能正确但是“UI”不友好的console了,但是不管怎么样,前期的图形界面的开发还是很有收获的,毕竟讲真,想要把Java搞得有形有色的也是很不容易的,借助可视化的插件windowsBuilder,这个过程还是既exciting 又tiring的. 好吧 ,然而图形界面已经成为了历史,现在来说说这个功能正确的console 吧 我也是刚知道的Eclipse里面是可以跑好多个程序的,只要你的一

node.js + socket.io 聊天群聊系统

主要功能:普通用户可以在群里聊天管理员登录后可以在群里聊天, 也可以踢人 详细功能: 收到消息有声音提醒(管理员发的消息有不同的声音提醒)进入聊天时会显示最近的聊天记录保存每一天的聊天记录到"日期.txt"文本中可以更换聊天背景实时显示在线人数实时显示聊天人员变动情况实时显示谁在输入消息管理员输入的字体颜色不同敏感字替换 源码地址: https://github.com/1061186575/chat 原文地址:https://www.cnblogs.com/zp106/p/12305

node+express+socket.io制作一个聊天室功能

首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js 1 var http=require("http"); 2 var express=require("express"); 3 var sio=require("socket.io"); 4 5 var app=express(); 6 app.use(express.static(__dirname+