创建一个socket服务实时统计在线人数
主要是两个文件,一个是后端文件,一个是前端文件:
后端文件:有人登录了,就通知所有的正在访问的页面,把总人数+1;反之-1;
前端文件:有人登录了,通知后端,页面关闭了,通知后端,同时接收后端派发来的消息;
首先,我们来写后端文件-app.js:
var express = require('express');
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
app.use('/', express.static(__dirname+'/'));
var users = [];
console.log('服务器运行于:localhost:3004');
io.on('connection', function(socket){
console.log('a user connected');
socket.on('login',function(data){
socket.username = data.username;
users.push(data.username);
// 统计连接数
socket.emit('users',{number:users.length}); // 发送给自己
socket.broadcast.emit('users',{number:users.length}); // 发送给其他人
});
socket.on('logout',function(data){
socket.username = data.username;
users=users.slice(0,users.length-1);
console.log()
统计连接数
socket.emit('users',{number:users.length}); // 发送给自己
socket.broadcast.emit('users',{number:users.length}); // 发送给其他人
});
});
//开启端口监听socket
server.listen(3004);
然后,前端html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Socket.IO Example</title>
</head>
<body>
<h1>Socket.IO及时通讯</h1>
<p id="count"></p>
<span class="logoutBtn">退出</sapn>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script>
<script>
//建立连接
socket = io.connect('http://你的服务器地址:3004');
socket.emit("login", {username:'defaultName'});
//接收服务端推送的信息
socket.on("users", function(obj) {
//var curContent = contentNode.html();
//contentNode.html(curContent+obj.msg);
console.log('当前在线:'+obj.number)
});
$('.logoutBtn').click(function(){
socket.emit("logout", {username:'defaultName'});
});
</script>
</body>
</html>
后端文件写好后,要发布到我们自己的服务器上运行才会生效,
后端文件要用到express和socket.io,所以我再创建一个package.json文件:
{
"name": "socketServer",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"express": "~4.16.0"
},
"devDependencies": {
"socket.io": "^2.2.0"
}
}
如图,app.js和package.json在一个叫socketServer文件夹中,通过ftp传到服务器:
在服务器命令行进入socketServer目录下,运行npm install命令,安装好依赖,安装好后就多了一个node_modules文件:
最后,我们运行我们的app.js:
一般我们都是通过npm start启动应用,其实就是调用node ./var/www/socketServer。
换成pm2就是:pm2 start ./var/www/socketServer
如果一切顺利的话,我们的在线人数统计就完成了。
如果你有使用pm2的话,使用:pm2 logs命令就可以在控制台上查看打印信息了
创建一个socket服务实时统计在线人数的更多相关文章
- 使用PHP创建一个socket服务端
与常规web开发不同,使用socket开发可以摆脱http的限制.可自定义协议,使用长连接.PHP代码常驻内存等.学习资料来源于workerman官方视频与文档. 通常创建一个socket服务包括这几 ...
- [Swift通天遁地]四、网络和线程-(14)创建一个Socket服务端
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- [Swift通天遁地]四、网络和线程-(13)创建一个Socket客户端
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- C# 创建一个WCF服务
做代码统计,方便以后使用: app.config配置文件设置: <configuration> <system.serviceModel> <bindings> & ...
- 为MongoDB创建一个Windows服务
一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...
- 【LINUX】——linux如何使用Python创建一个web服务
问:linux如何使用Python创建一个web服务? 答:一句话,Python! 一句代码: /usr/local/bin/python -m SimpleHTTPServer 8686 > ...
- 第一个socket服务端程序
第一个socket服务端程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include ...
- ng 通过factory方法来创建一个心跳服务
<!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> <met ...
- 使用PHP来简单的创建一个RPC服务
RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...
随机推荐
- springAOP(Aspect)权限访问页面
1.XML进行配置切面 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- java三大特性(封装、继承、多态)
oop(面向对象程序设计)具有三大特性:封装.继承.多态 一.封装 封装就是讲类的信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类的实现隐藏信息的操作和访问. 实现封装 1.需要修改属性的访问 ...
- qt+vs2005新建配置不自动加载Generated Files进工程(个人备份)
工程右键Qt Project Settings 的Moc Directory路径删除 确定,再进入将删除路径加上
- 确保img的宽高比固定
html: <div class="wrapper"> <swiper :options="swiperOption"> <swi ...
- Oracle以固定字符截取字符串
CREATE OR REPLACE FUNCTION "F_SPLIT" (p_str IN CLOB, p_delimiter IN VARCHAR2) RETURN ty_st ...
- Java并发包:AtomicBoolean和AtomicReference
AtomicBoolean AtomicBoolean是一个读和写都是原子性的boolean类型的变量.这里包含高级的原子操作,例如compareAndSet().AtomicBoolean位于J ...
- stl学习之namespace
一.为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突. 在 C语言中定义了3个层次的作用域,即文件(编译单元).函数和复合语句.C++ ...
- Vue-cli 3.0 使用Sass Scss Less预处理器
项目中使用预处理器,可以有效减少css代码量,使用Sass||Scss||Less; 预处理器 你可以在创建项目的时候选择预处理器 (Sass/Less/Stylus).如果当时没有选好, 内置的 w ...
- canvas常用属性方法由浅下沉
首先引入<canvas></canvas>标签就不必说了. 其次就是得到canvas的2d环境了( var ctx = canvasDom.getContext('2d') ) ...
- LCD驱动程序编写
学习目标:编写LCD驱动程序,熟悉根据芯片手册分析时序图,配置寄存器,并测试LCD程序. 一.LCD驱动程序编写 步骤: 1)分配fb_info结构体 2)设置fb_info结构体 a. 固定参数 b ...