node学习笔记之io.sockets
socket.get和socket.set函数已经失效,代码修改如下所示:
服务器端:
- var httpd = require('http').createServer(handler);
- var io = require('socket.io').listen(httpd);
- var fs = require('fs');
- httpd.listen(3000);
- 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.on('clientMessage', function(content) {
- socket.emit('serverMessage', 'You said: ' + content);
- var username = null;
- if (socket.username) {
- username = socket.username;
- }
- socket.broadcast.emit('serverMessage', username + ' said: ' +
- content);
- });
- socket.on('login', function(username) {
- socket.username = username;
- socket.emit('serverMessage', 'Currently logged in as ' + username);
- socket.broadcast.emit('serverMessage', 'User ' + username +
- ' logged in');
- });
- socket.emit('login');
- });
客户端:
- <html>
- <head>
- <title>Node.js WebSocket chat</title>
- <style type="text/css">
- #input {
- width: 200px;
- }
- #messages {
- position: fixed;
- top: 40px;
- bottom: 8px;
- left: 8px;
- right: 8px;
- border: 1px solid #EEEEEE;
- padding: 8px;
- }
- </style>
- </head>
- <body>
- Your message:
- <input type="text" id="input">
- <div id="messages"></div>
- <script src="http://localhost:3000/socket.io/socket.io.js"></script>
- <script type="text/javascript">
- var messagesElement = document.getElementById('messages');
- var lastMessageElement = null;
- function addMessage(message) {
- var newMessageElement = document.createElement('div');
- var newMessageText = document.createTextNode(message);
- newMessageElement.appendChild(newMessageText);
- messagesElement.insertBefore(newMessageElement,
- lastMessageElement);
- lastMessageElement = newMessageElement;
- }
- var socket = io.connect('http://localhost:3000');
- socket.on('serverMessage', function(content) {
- addMessage(content);
- });
- socket.on('login', function() {
- var username = prompt('What username would you like to use?');
- socket.emit('login', username);
- });
- var inputElement = document.getElementById('input');
- inputElement.onkeydown = function(keyboardEvent) {
- if (keyboardEvent.keyCode === 13) {
- socket.emit('clientMessage', inputElement.value);
- inputElement.value = '';
- return false;
- } else {
- return true;
- }
- };
- </script>
- </body>
- </html>
node学习笔记之io.sockets的更多相关文章
- Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)
这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的ng2技术,奈何坑是一片又一片,这边就先介绍下环境部署和填坑史 既然要用ng2,首先要拿到资源,我这边用的是angular ...
- Node学习笔记(三):基于socket.io web版你画我猜(二)
上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...
- node学习笔记(二)(ajax方式向node后台提交数据)
通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...
- 将js进行到底:node学习笔记1
废话:自高中以来一直对编程充满激情,磨剑五年,如今要毕业了,我不想用我已经擅长的知识敷衍,而想以一个全新的领域去面向我的毕设--是时候学习一下node.js node.js基础 对于JavaScrip ...
- node学习笔记第一天
ES6---* JavaScript语言随着使用的人越来越多,ECMA语法规范:if/else* 为了让js语言更适应大型应用的开发.旨在消除一些怪异的行为 ### 包含内容(strict严格模式)- ...
- Node学习笔记(三):基于socket.io web版你画我猜(一)
经过惨淡的面试,也是知道了自己的不足,刚好最近在学习node,心中便有了做一个web版的你画我猜的想法 首先说下思路,在做准备工作的时候,有两个大概的思路: 1.规定一块div,捕捉鼠标事件,动态生成 ...
- Node学习笔记---初识Node
博客原文地址:Claiyre的个人博客 https://claiyre.github.io/ 博客园地址:http://www.cnblogs.com/nuannuan7362/ 如需转载,请在文章开 ...
- Nodejs全站开发学习系列 & 深入浅出Node学习笔记 & Spider抓取
https://course.tianmaying.com/node 这个系列的文章看起来很不错,值得学习一下. /Users/baidu/Documents/Data/Interview/Web-S ...
- Node学习笔记(二):事件驱动
接触Node,提得最多的可能就是回调,异步非阻塞处理,思前想后,JavaScript从前端语言过渡到服务器端,最大的劣势可能就是线程,当然这方面的不足现在也被慢慢弥补起来了(很多第三方的npm包可供下 ...
随机推荐
- Python Django 之 静态文件存放设置
一.静态文件存放路径设置STATICFILES_DIRS 1.在django项目目录下面新建静态文件保存目录 2.在setting中添加相应寻找静态文件目录的配置 STATICFILES_DIRS=( ...
- 【转】Mac OS X Terminal 101:终端使用初级教程
最近学习苹果认证的<Mac OS X Support Essentials>教程,看到 Command Line 一节有很多实用的知识,下面选取一部分翻译 + 笔记,整理成此文. 你可以整 ...
- Linux命令----uname查看系统信息
uname就是UNIXname的缩写 1.uname可以查询操作系统信息 [root@yuan ~]# uname Linux 2.uname -n显示系统的主机名 [root@yuan ~]# un ...
- C++关于运算符的注意事项
1.函数调用也是一种特殊的运算符,对运算对象的个数不作限制. 2.几元运算符,是基于作用的对象的数量. 3.不同类型的运算对象进行运算,可能会出现类型转换,一般情况下小整数类型会被转换成较大的整数类型 ...
- SQL-13 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。
题目描述 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t.CREATE TABLE IF NOT EXISTS "titles" ( ...
- win10 安装 mysql-8.0.12
安装mysql 8 1.下载 https://dev.mysql.com/downloads/mysql/ 2.设置环境变量 将你解压后的文件里边的bin目录加入到path中.例如:D:\develo ...
- 什么是XP
极限编程(XP)是敏捷过程中最富盛名的一个.下述这些特点使得敏捷过程能够较好地适应商业竞争环境下对小型项目提出的有效资源和有限开发时间的约束. 极限编程的有效实践 极限编程的整体开发过程 极限编程的迭 ...
- android 广播 接收短信
; i < messages.length; i++) { SmsMessage ms = SmsMessage.createFromPdu((byte[])pdus[i]); String f ...
- .NET实现字符串base64编码
using System; using System.Text; using System.IO; using System.Security; using System.Security.Crypt ...
- 读取文件时,使用file.eof()判断结尾注意事项
今天写一个小功能需要读取文件,在判断文件结尾时使用了以下语句: while(infile.eof() && infile.good()) { infile.read((); encod ...