基于socket.io和node.js搭建即时通信系统


Posted in Javascript onJuly 30, 2014

使用socket.io和nodejs搭建websocket服务器端

socket.io不仅可以搭建客户端的websocket服务,而且支持nodejs服务器端的websocket。

下面让我来介绍一下怎么安装配置nodejs.

进入http://nodejs.org/#download下载msi文件。一直点next安装。最后文件会自动安装在C:\nodejs目录下。

安装完成后,会自动配置环境环境变量。如果没有自动配置,自己手动在path处加上 ;C:\nodejs\。

安装完成后,需要配置npm来管理node.js的模块。

在window下安装npm需要安装git。

安装完git后,打开gitbush。执行下面几步:

git config --system http.sslcainfo /bin/curl-ca-bundle.crt

git clone --recursive git://github.com/isaacs/npm.git

cd npm

node cli.js install npm -gf

第一个是设置不会有任何提示,第二步会到github上下载npm会有下载文件和进度,第四步是安装npm到node.js会复制几个文件cmd文件和mode_modules文件夹到nodejs目录。

这样就配置好了npm。

如果需要安装什么模块直接输入npm install ***。

没有npm的或者windows用户可以使用github下载socket.io并且放入到node_modules文件夹中,具体配置可以参考文章:《nodejs教程:配置nodejs.exe的windows目录结构》

nodejs安装socket.io

使用node插件管理包,运行下面的命令就可以安装成功socket.io

npm install socket.io

用socket.io 实现的一个例子

客户端代码:

<html> 

<head> 

  <title></title> 

  <script src="../js/socket.io.client.js"></script> 

  <script type="text/javascript"> 

    function doit() { 

      var socket = io.connect('http://localhost'); 

      socket.on('news', function (data) {//接收到服务器发送过来的名为'new'的数据 

        console.log(data.hello);//data为应服务器发送过来的数据。 

        socket.emit('my new event', { my:'new data' });//向服务器发送数据,实现双向数据传输 

      }); 

      socket.on('other', function (data) {//接收另一个名为'other'数据, 

        console.log(data.hello); 

        socket.emit('event1', { my:'other data' }); 

      }); 

    } 

  </script> 

</head> 

<body> 

<button id='btn' onclick="doit()">click me</button> 

</body> 

</html>

socket.io.client.js可以https://github.com/LearnBoost/socket.io-client下载到本地,在<script src="..">指向本机的js库。

服务器用nodejs实现

server2.js

var http= require('http'), io= require('socket.io'), express= require('express'); 

var app = express.createServer(), io = io.listen(app); 

app.listen(80); 

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

 socket.emit('news', { hello: 'world' });//监听,一旦客户端连接上,即发送数据,第一个参数'new'为数据名,第二个参数既为数据 

 socket.on('my other event', function (data) {//捕获客户端发送名为'my other event'的数据 

  console.log(data.my); 

 }); 

 socket.emit('other', { hello: 'other world' });//发送另一个数据 

 socket.on('evnet1', function (data) {//捕获另外一个数据 

  console.log(data.my); 

 }); 

});

测试结果,客户端可正常显示

服务器端显示结果:

C:\java\Nodejs>node server2.js

注:代码要和npm_module在同一个目录下。不然会出现找不到socket.io module的错误。

Javascript 相关文章推荐
JavaScript面象对象设计
Apr 28 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
用js解决数字不能换行问题
Aug 10 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
Feb 13 Javascript
JS获取后台Cookies值的小例子
Mar 04 Javascript
ActiveX控件与Javascript之间的交互示例
Jun 04 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 Javascript
laydate时间日历插件使用方法详解
Nov 14 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
Jul 30 #Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 #Javascript
jQuery修改CSS伪元素属性的方法
Jul 30 #Javascript
教你在heroku云平台上部署Node.js应用
Jul 30 #Javascript
浅析Node在构建超媒体API中的作用
Jul 30 #Javascript
JS实现图片无间断滚动代码汇总
Jul 30 #Javascript
使用jquery.upload.js实现异步上传示例代码
Jul 29 #Javascript
You might like
elgg 获取文件图标地址的方法
2010/03/20 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
有关php运算符的知识大全
2011/11/03 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
实验教师岗位职责
2014/02/13 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
先进党员事迹材料
2014/12/24 职场文书
销售辞职信范文
2015/03/02 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL
Java 定时任务技术趋势简介
2022/05/04 Java/Android
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript