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 submit ie6下失效的原因分析及解决方法
Nov 15 Javascript
Js可拖拽放大的层拖动特效实现方法
Feb 25 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
Dec 26 Javascript
Node.js连接MongoDB数据库产生的问题
Feb 08 Javascript
JavaScript运动框架 链式运动到完美运动(五)
May 18 Javascript
vue使用rem实现 移动端屏幕适配
Sep 26 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
vue 解决文本框被键盘遮住的问题
Nov 06 Javascript
jquery添加div实现消息聊天框
Feb 08 jQuery
vue数据字典取键值项目的字典问题
Apr 12 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 循环列出目录内容的函数代码
2010/05/26 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
JavaScript包装对象使用介绍
2013/08/29 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
js实现图片实时时钟
2020/01/15 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
python脚本实现查找webshell的方法
2014/07/31 Python
Saltstack快速入门简单汇总
2016/03/01 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
Django密码存储策略分析
2020/01/09 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
如何利用find命令查找文件
2015/02/07 面试题
高中生毕业自我鉴定
2013/10/10 职场文书
社区春季防火方案
2014/06/02 职场文书
2014年团队工作总结
2014/11/24 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python