golang基于websocket实现的简易聊天室程序

  

本文实例讲述了golang基于websocket实现的简易聊天室。分享给大家供大家参考,具体如下:

  

先说点无关的,最近忙于工作没有更新博客,今天休息顺便把golang websocket研究了一下,挺好玩的,写了一个聊天室,分享给大家。

  

websocket包:code.google.com/p/go.net/websocket

  

文档:http://go.pkgdoc.org/code.google.com/p/go.net/websocket

  

首先安装websocket包
  代码如下:去code.google.com/p/go.net/websocket

  

下来就是聊天室代码了,呵呵

  

golang websocket聊天室
  代码如下:主要包
  导入(
  ,,“fmt”
  ,,“输入输出”
  ,,“bufio”
  ,,"net/http”
  ,,"code.google.com/p/go.net/websocket”
  ,,“容器/列表”
  )
  var connid int
  var康涅狄格州*列表。列表
  func ChatroomServer (ws * websocket.Conn) {
  ,,推迟ws.Close ()
  ,,connid + +
  ,,id:=connid
  ,,fmt。Printf("连接id: % d \ n”, id)
  ,,项目:=conns.PushBack (ws)
  ,,推迟conns.Remove(项)
  ,,名称:=fmt。Sprintf(“用户% d”, id)
  ,,SendMessage (nil, fmt。Sprintf(“欢迎% s加入\ n”,名字))
  ,,r:=bufio.NewReader (ws)
  ,,为{
  ,,,,,,数据,犯错:=r.ReadBytes (“\ n”)
  ,,,,,,如果犯错!=nil {
  ,,,,,,,,,,fmt。Printf("断开连接id: % d \ n”, id)
  ,,,,,,,,,,SendMessage (fmt项目。Sprintf (“% s离线\ n”,名字))
  ,,,,,,,,,,打破
  ,,,,,,}
  ,,,,,,fmt。Printf (" % s: % s”,名称、数据)
  ,,,,,,SendMessage(项目,fmt.Sprintf (“% s \ t>% s”,名称、数据)
  ,,}
  }
  func SendMessage(自我*列表。元素,数据字符串){
  ,,//_,单品:=范围康涅狄格州{
  ,,项目:=conns.Front ();项!=零;项=item.Next () {
  ,,,,,,ws,好:=item.Value。(* websocket.Conn)
  ,,,,,,如果!好{
  ,,,,,,,,,,恐慌(“项目不是* websocket.Conn”)
  ,,,,,,}
  ,,,,,,如果项目==自我{
  ,,,,,,,,,,继续
  ,,,,,,}
  ,,,,,,io。WriteString (ws、数据)
  ,,}
  }
//网页客户端
  func客户机(w http。ResponseWriter r * http.Request) {
  ,,html:=' & lt; !doctype html>
  & lt; html>
  & lt; head>
  ,,& lt;元http-equiv=? type”内容=" text/html;utf - 8字符集="/祝辞
  ,,& lt; title> golang websocket chatroom
  ,,& lt;脚本src=" http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js "祝辞& lt;/script>
  ,,& lt; script>
  ,,,,,,var ws=new WebSocket (ws://127.0.0.1:6611/聊天室);
  ,,,,,,ws。onopen=function (e) {
  ,,,,,,,,,,console.log (“onopen”);
  ,,,,,,,,,,console.dir (e);
  ,,,,,,};
  ,,,,,,ws。onmessage函数=(e) {
  ,,,,,,,,,,console.log (“onmessage”);
  ,,,,,,,,,,console.dir (e);
  ,,,,,,,,,,$(" #日志”).append (' & lt; p> + e.data + & lt; p>);
  ,,,,,,,,,,$(' #日志'). get (0)。scrollTop=$(' #日志'). get (0) .scrollHeight;
  ,,,,,,};
  ,,,,,,ws。onclose=function (e) {
  ,,,,,,,,,,console.log (“onclose”);
  ,,,,,,,,,,console.dir (e);
  ,,,,,,};
  ,,,,,,ws。onerror=function (e) {
  ,,,,,,,,,,console.log (“onerror”);
  ,,,,,,,,,,console.dir (e);
  ,,,,,,};
  ,,,,,,美元(函数(){
  ,,,,,,,,,,null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

golang基于websocket实现的简易聊天室程序