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 相关文章推荐
仿jQuery的siblings效果的js代码
Aug 09 Javascript
checkbox使用示例
Aug 23 Javascript
node.js中的emitter.emit方法使用说明
Dec 10 Javascript
javascript实现倒计时(精确到秒)
Jun 26 Javascript
简单谈谈node.js 版本控制 nvm和 n
Oct 15 Javascript
深入理解JavaScript中为什么string可以拥有方法
May 24 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
Jun 20 Javascript
JS敏感词过滤代码
Dec 23 Javascript
Angular数据绑定机制原理
Apr 17 Javascript
javascript canvas检测小球碰撞
Apr 17 Javascript
原生JS实现九宫格抽奖
Sep 13 Javascript
vue 通过base64实现图片下载功能
Dec 19 Vue.js
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学习笔记(三)操作符与控制结构
2011/08/06 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
强制设为首页代码
2006/06/19 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python如何随机生成高强度密码
2020/08/19 Python
pip install命令安装扩展库整理
2021/03/02 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
小学开学寄语
2014/01/19 职场文书
cf战队收人广告词
2014/03/14 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
服务行业演讲稿
2014/09/02 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
八年级英语教学计划
2015/01/23 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
HDFS免重启挂载新磁盘
2022/04/06 Servers
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL