转载:socket.io 入门
原文链接:http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264
我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单的聊天程序。
最最开始
先安装socket.io:
npm install socket.io
利用Node的搭建Http服务
分为两个文件,服务端文件app.js和客户端index.html
app.js
var app =require('http').createServer(handler)
, io =require('socket.io').listen(app)
, fs =require('fs')0405 app.listen(80);
function handler (req, res){fs.readFile(__dirname+'/index.html',function(err, data){
if(err){
res.writeHead(500);
return res.end('Error loading index.html');
}else{
res.writeHead(200);
res.end(data);
}
});
}
io.sockets.on('connection',function(socket){
socket.emit('news',{ hello:'world'});
socket.on('my other event',function(data){
console.log(data);
});
});
这里需要注意的是:
require('socket.io').listen(app) 实际上这句就是讲socket的监听加入的app设置的http模块了
io.sockets.on('connection',function()....)这里设置了在连接后进行的处理,代码示例中,主要包含两件事,一个是向前段发送news的事件,一个是监听my other event事件。
index.html <script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news',function(data){
console.log(data);
socket.emit('my other event',{my:'data'});
});
</script>
客户端一个引用了socket.io.js的javscript库
还有就是连接服务器(通过io.connect('http://localhost'))
之后在监听收到news的事件后,发送my other event事件
利用Express3框架
上面的例子只是使用nodejs建立了一个交互,也可以使用express2的web框架, 具体app.js代码如下:
var app =require('express')(),
server =require('http').createServer(app),
io =require('socket.io').listen(server);
server.listen(80);
app.get('/',function(req, res){
res.sendfile(__dirname +'/index.html');});
io.sockets.on('connection',function(socket){
socket.emit('news',{ hello:'world'});
socket.on('my other event',function(data){
console.log(data);
});
});
接收发送事件
socket.io允许用户自定义发送接收的事件。除了connect,message,disconnect三个事件外,用户可以自定义自己的事件
app.js
var io =require('socket.io').listen(80);
var chat = io
.of('/chat')
.on('connection',function(socket){
socket.emit('a message',{that:'only','/chat':'will get'});
chat.emit('a message',{
everyone:'in','/chat':'will get'});});
var news = io
.of('/news')
.on('connection', function (socket) {
socket.emit('item', { news: 'item' });
}); client.js
<script>var chat = io.connect('http://localhost/chat'), news = io.connect('http://localhost/news'); chat.on('connect',function(){
chat.emit('hi!');}); news.on('news',function(){
news.emit('woot');});</script>
发送获取数据
有的时候,你需要在发送数据后,等待服务器的消息确认。当然简单的发,可以通过两次消息发送,来完成。这里介绍一种使用回调函数的方法:
app.js
var io =require('socket.io').listen(80); io.sockets.on('connection',function(socket){
socket.on('ferret',function(name, fn){
fn('woot');});});
client.html
<script>var socket = io.connect();// TIP: .connect with no args does auto-discovery
socket.on('connect',function(){// TIP: you can avoid listening on `connect` and listen on events directly too!
socket.emit('ferret','tobi',function(data){
console.log(data);// data will be 'woot'});});</script>
广播
向所有的连接触发事件,这里注意:不包括本身连接的事件。
var io =require('socket.io').listen(80);
io.sockets.on('connection',function(socket){
socket.broadcast.emit('user connected');});
我写的聊天程序:
index.html <scriptsrc="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on("notice",function(data){ var msg = document.getElementById('all').value;
document.getElementById('all').innerText = msg +"\n"+ data.message;}); var chat_fn =function(){var msg = document.getElementById("message").value;
socket.emit("chat",{message: msg});}; socket.on("nickname ready",function(data){
alert("nickname changed.");}); var change_nickname =function(){var nickname = document.getElementById("nickname").value; socket.emit('set nickname', nickname);};</script>
<textareaid="all"cols=40rows=20>
</textarea><br/>
<label>Message:</label>
<inputid="message"type="text"name="message"cols=120/>
<inputid="chat_btn"type="button"value="chat"onclick="javascript:chat_fn()"/>
<label>NickName:</label>
<inputid="nickname"typee="text"name="nickname"/>
<inputid="chang_name"type="button"value="nickname"onclick="javascript:change_nickname()"/>
app.js
var app =require('http').createServer(handler), io =require('socket.io').listen(app), fs =require('fs');
app.listen(80);function handler (req, res){
fs.readFile(__dirname +'/index.html',function(err, data){if(err){
res.writeHead(500);return res.end('Error loading index.html');}
res.writeHead(200);
res.end(data);});}
io.sockets.on('connection',function(socket){// socket.emit('news', { hello: 'world' });// socket.on('my other event', function (data) {// console.log(data);// });
socket.set('nickname','nickname',function(){});
socket.on('set nickname',function(name){
socket.set('nickname', name,function(){
console.log("change nickname=>"+ name);
socket.emit('nickname ready');});});
socket.on('chat',function(data){
socket.get('nickname',function(err, name){
socket.emit("notice",{message: name +":"+ data.message});
socket.broadcast.emit("notice",{message: name +":"+ data.message});
console.log("chat: "+ data.message);});});});
转载:socket.io 入门的更多相关文章
- socket.io入门整理教程
socket.io入门整理 发布于 5 年前 作者 dtrex 124983 次浏览 最后一次编辑是 1 年前 我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写 ...
- Socket.io 入门 - Renyi的博客
Socket.io Vue 中使用 NPM 安装 npm install vue-socket.io --save npm install --save socket.io-client 引用 详情 ...
- socket.io 入门教程
转载自:http://deadhorse.me/nodejs/2011/12/29/socket.io_induction.html socket.io socket.io是一个以实现跨浏览器.跨平台 ...
- Node.js、Express、Socket.io 入门
前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...
- socket.io 入门篇(三)
本文原文地址:https://www.limitcode.com/detail/5926e3a056fba70278bf2044.html 前言 上篇我们介绍了 socket.io 中room的概念和 ...
- socket.io 入门篇(二)
本文原文地址:https://www.limitcode.com/detail/5922f1ccb1d4fe074099d9cd.html 前言 上篇我们介绍了 socket.io 基本使用方法,本篇 ...
- socket.io 入门篇(一)
本文原文地址:https://www.limitcode.com/detail/591b114bb1d4fe074099d9c9.html 前言 本篇介绍使用node.js模块组件socket.io实 ...
- socket.io入门整理
我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单的聊天程序. 最最开始 先安装socket.io: 1 npm install socket.io 利用Nod ...
- socket.io入门示例参考
参考示例地址:http://www.linchaoqun.com/html/cms/content.jsp?menu=nodejs&id=1480081169735
随机推荐
- selenium+python笔记11
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: search in mail box "&qu ...
- Windows环境配置Apache+Mysql+PHP
一.安装配置Apache2.4.7(httpd-2.4.7-win64-VC11.zip ) 1.解压下载的安装包:httpd-2.4.7-win64-VC11.zip将其放到自己的安装目录(我的目录 ...
- <spring:message> 标签
可以使用<spring:message>标签结合 ResourceBundleMessageSource 的功能,在网页上显示 messages.properties 中的文字讯息,例如在 ...
- JSP中,当页面为404或者500时。设置跳转到错误提示页面
最好的就是在WEB.XML文件中配置错误代码的跳转页面,首先建立个 出现500错误的页面,提示出错了,然后再WEB.XML文件中配置,配置如下 一. 通过错误码来配置error-page <er ...
- 开源项目导入eclipse的一般步骤[转]
下载到开源项目后,我们还是希望导入到eclipse中还看,这样要方便点,一般的步骤是这样的 打开源代码目录, 如果看到里面有.calsspath .project文件,那么说明这个项目本来就是ec ...
- JS正则表达式基础
正则表达式的作用: 测试字符串的某个模式 替换文本 根据模式匹配从字符串中提取一个子字符串.可以用来在文本或输入字段中查找特定文字 [^\d]/g这是一个正则表达式,在JS中 ...
- 简单分析Java的HashMap.entrySet()的实现
关于Java的HashMap.entrySet(),文档是这样描述的:这个方法返回一个Set,这个Set是HashMap的视图,对Map的操作会在Set上反映出来,反过来也是.原文是 Returns ...
- Time, Clocks, and the Ordering of Events in a Distributed System
作者:Leslie Lamport(非常厉害的老头了) 在使用消息进行通信的分布式系统中,使用物理时钟对不同process进行时间同步与事件排序是非常困难的.一是因为不同process的时钟有差异,另 ...
- POJ 2482 扫描线(面积覆盖最大次数)
Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10806 Accepted: ...
- 滑雪(dp好题)
题目描述:贝西去科罗拉多州去滑雪,不过还她不太会玩,只是个能力为 1 的渣渣.贝西从 0 时刻进入滑雪场,一到 T 时刻就必须离开.滑雪场里有 N 条斜坡,第 i 条斜坡滑行一次需要 Di 分钟,要求 ...