第十三章:基于socket.io实现即时通信

服务器端的搭建参考socket io官网,里面有非常详细的描述,按照步骤下来,最终可以在localhost进行模拟聊天。

下面是客户端的说明。

  • 引入socket.io.js:
<script src="js/socket.io.js"></script>
  • 定义Chats tab:
  <!-- Chats Tab -->
  <ion-tab title="Chats" icon-off="ion-ios-chatboxes-outline" icon-on="ion-ios-chatboxes" href="#/tab/chats">
    <ion-nav-view name="tab-chats"></ion-nav-view>
  </ion-tab>
  •  定义tab-chat.html:
<ion-view view-title="Chats">
<ion-content overflow-scroll="true" style="overflow: hidden">

<ion-scroll zooming="true" direction="y" style=" height:500px;" >
    <ion-list>
      <uib-alert ng-repeat="msgInfo in messages" type="{{msgInfo.type}}" close="closeAlert($index)">{{msgInfo.msgType}}: {{msgInfo.msg}}</uib-alert>
    </ion-list>
</ion-scroll>

    <div class="bar bar-footer">
       <label class="item item-input" style=" width:85%">
          <input type="text" placeholder="please add your message here" ng-model="msg"></input>
      </label>
      <button class="button button-positive" ng-click="send(msg)">Send</button>

    </div>
  </ion-content>
  </ion-view>
  • 在app.js中定义chats的state:
  .state(‘tab.chats‘, {
      url: ‘/chats‘,
      views: {
        ‘tab-chats‘: {
          templateUrl: ‘templates/tab-chats.html‘,
          controller: ‘ChatsCtrl‘
        }
      }
    })
  •  定义ChatsCtrl:
.controller(‘ChatsCtrl‘, function ($scope,mediaPlayer, chats) {
    $scope.messages = [];

    chats.on(‘chat message‘, function (msg) {
        var msgInfo = { msg: msg, type: ‘warning‘,msgType:"Receiver" }
        $scope.messages.push(msgInfo);
        console.log(‘receive msg from others: ‘ + msg);
    });

    $scope.send = function (msg) {
        var msgInfo = { msg: msg, type: ‘success‘, msgType: "Sender" }
        $scope.messages.push(msgInfo);
        console.log(‘start to send msg: ‘ + msg);
        chats.emit(‘chat message‘, msg);
    };

    $scope.closeAlert = function (index) {
        $scope.messages.splice(index, 1);
    };
})
  • 实现factory:
var baseUrl = ‘http://localhost:3000/‘;

.factory(‘chats‘, function socket($rootScope) {
  var socket = io.connect(baseUrl);
  return {
    on: function (eventName, callback) {
      socket.on(eventName, function () {
        var args = arguments;
        $rootScope.$apply(function () {
          callback.apply(socket, args);
        });
      });
    },
    emit: function (eventName, data, callback) {
      socket.emit(eventName, data, function () {
        var args = arguments;
        $rootScope.$apply(function () {
          if (callback) {
            callback.apply(socket, args);
          }
        });
      })
    }
  };
})

参考资料:

https://github.com/jbavari/ionic-socket.io-redis-chat
http://jbavari.github.io/blog/2014/06/17/building-a-chat-client-with-ionic/
http://socket.io/get-started/chat/
时间: 2024-12-10 08:38:58

第十三章:基于socket.io实现即时通信的相关文章

C语言 linux环境基于socket的简易即时通信程序

转载请注明出处:http://www.cnblogs.com/kevince/p/3891033.html   By Kevince 最近在看linux网络编程相关,现学现卖,就写了一个简易的C/S即时通信程序,代码如下: head.h 1 /*头文件,client和server编译时都需要使用*/ 2 #include <unistd.h> 3 #include <stdio.h> 4 #include <sys/types.h> 5 #include <sys

AF_UNIX域通信(基于socket和pipe的通信,只适于UNIX系统S&C同在一个主机上,用于进程通信)

服务器端: #include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <sys/socket.h>#include <sys/un.h>#include <stddef.h>char buf[100];void main

基于Qt的局域网即时通信系统设计与实现(一)

本系统主要实现了注册登录.好友管理.即时通信(文本.视频).群组功能.消息管理.邮件收发.文件收发等主要功能.用户通过简单的注册以后,便可以登录系统.随后进行好友.群以及讨论组的添加,就可以与其他在线的用户进行行即时通信.对于消息记录,服务器以及客户端都会在各自文件或者数据库中进行相应的存储,用户可以随时进行本地消息以及网络消息的管理.当然文件的收发也得到了很好的实现,并且也集成了简单邮件收发功能. 本想分模块展示,但是要把单独模块的代码o出来,真的很麻烦,所以还是偷懒一点,直接整个来吧,不明白

基于socket.io的实时消息推送

用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化,如果没有来自客户端的请求,用户就不会看到这些变化. 这种模式是不适合某些应用场景的,比如在社交网络用户需要近乎实时地知道其他用户最新的信息.对于普通站点来说, 请求-响应模式可以满足绝大多数的功能需求,但总有某些功能我们希望能够为用户提供实时消息的体验. 为解决这个问题,有两种方案可以选择: 仍旧使

[Node.js] 基于Socket.IO 的私聊

原文地址:http://www.moye.me/2015/01/02/node_socket-io/ 引子 最近听到这么一个问题:Socket.IO 怎么实现私聊?换个提法:怎么定位到人(端),或者说怎么标识到连接,而不是依赖每个连接的socket.id.好问题. 在 Socket.IO Real-Time Web Application Development的指引下,形成了如下思路: 服务端在每个用户初次进入系统时,产生session_id 服务端强制用户输入昵称,与session_id对应

在线白板,基于socket.io的多人在线协作工具

首发:个人博客,更新&纠错&回复 是昨天这篇博文留的尾巴,socket.io库的使用练习,成品地址在这里. 代码已经上传到github,传送门.可以开俩浏览器看效果. 现实意义是俩人在线交流时说不明白,这时有个白板就好了,两人都能在上面写写画画,帮助沟通. 把github的readme搬过来—— 此项目用于socket.io技术的使用演示 1.安装node.js 2.在某个文件夹下执行npm install socket.io 3.将源码拷贝到该文件夹下 4.执行node main.js

nodejs 基于socket.io实现聊天室

由于之后要做的网页视频直播项目要用到socket.io模块,所以特地花时间研究了下,参照网上的代码做了些改进,自己写了个聊天室代码.不得不承认后端事实推送能力有点厉害,这是以前我用php一直苦恼的事情.下面简单介绍下我的项目,顺带讲解下nodejs. 事实上,在看别人写的代码之前,我一直不知道nodejs是干嘛的,直到真正接触到才明白这也可以算作是服务端代码,丰富的第三方库使其功能极其强大.它可以像golang的beego一样直接通过命令行开启服务器,不过要用到express模块.加载模块的方式

H5+MUI+Node.js+Socket.io实现即时聊天以及发送+图片压缩

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title

基于socket.io客户端与服务端的相互通讯

socket.io是对websocket的封装,用于客户端与服务端的相互通讯.官网:https://socket.io/. 下面是socket.io的用法: 1.由于使用express开的本地服务,先下载相关依赖 cnpm install express socket.io 2.服务端代码 const express = require("express"); const io = require("socket.io"); const app = express(