angular中使用Socket.io实例代码


Posted in Javascript onJune 03, 2017

服务端(nodeJs/express):

let app = require('express')();
let http = require('http').Server(app);
let io = require('socket.io')(http);

io.on('connection', (socket) => {
 console.log('user connected');
 
 socket.on('disconnect', function(){
  console.log('user disconnected');
 });
 
 socket.on('add-message', (message) => {
  io.emit('message', {type:'new-message', text: message});  
 });
});

http.listen(5000, () => {
 console.log('started on port 5000');
});

客户端,创建一个ChatService

import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import * as io from 'socket.io-client';

export class ChatService {
 private url = 'http://localhost:5000'; 
 private socket;
 
 sendMessage(message){
  this.socket.emit('add-message', message);  
 }
 
 getMessages() {
  let observable = new Observable(observer => {
   this.socket = io(this.url);
   this.socket.on('message', (data) => {
    observer.next(data);  
   });
   return () => {
    this.socket.disconnect();
   }; 
  })   
  return observable;
 } 
}

ChatComponent

import { Component, OnInit, OnDestroy } from '@angular/core';
import { Control }      from '@angular/common';
import { ChatService }    from './chat.service';

@Component({
 moduleId: module.id,
 selector: 'chat',
 template: `<div *ngFor="let message of messages">
           {{message.text}}
          </div>
          <input [(ngModel)]="message" /><button (click)="sendMessage()">Send</button>`,
 providers: [ChatService]
})
export class ChatComponent implements OnInit, OnDestroy {
 messages = [];
 connection;
 message;
 
 constructor(private chatService:ChatService) {}

 sendMessage(){
  this.chatService.sendMessage(this.message);
  this.message = '';
 }

 ngOnInit() {
  this.connection = this.chatService.getMessages().subscribe(message => {
   this.messages.push(message);
  })
 }
 
 ngOnDestroy() {
  this.connection.unsubscribe();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
accesskey 提交
Jun 26 Javascript
实用javaScript技术-屏蔽类
Aug 15 Javascript
基于jQuery的日期选择控件
Oct 27 Javascript
Js操作树节点自动折叠展开的几种方法
May 05 Javascript
JavaScript实现重置表单(reset)的方法
Apr 02 Javascript
JS简单实现城市二级联动选择插件的方法
Aug 19 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
微信小程序传值以及获取值方法的详解
Apr 29 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
Aug 20 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 Javascript
jquery请求servlet实现ajax异步请求的示例
Jun 03 #jQuery
深入理解Node中的buffer模块
Jun 03 #Javascript
MvcPager分页控件 适用于Bootstrap
Jun 03 #Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 #Javascript
vue 中自定义指令改变data中的值
Jun 02 #Javascript
Jquery EasyUI $.Parser
Jun 02 #jQuery
BootStrap 动态表单效果
Jun 02 #Javascript
You might like
一个PHP数组应该有多大的分析
2009/07/30 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
python删除文件示例分享
2014/01/28 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Django如何实现防止XSS攻击
2020/10/13 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
创伤外科专业推荐信范文
2013/11/19 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
公司端午节活动方案
2014/02/04 职场文书
计算机专业自荐信
2014/05/24 职场文书
会计试用期自我评价
2015/03/10 职场文书
地道战观后感500字
2015/06/04 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers