分享
  1. 首页
  2. 文章

golang 聊天室

lucifer_qiao · · 6073 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近看了一些关于golang的资料,发现它的WEBSOCKT实现真起来真的很容易,下面是代码

go.net/websocket是需要安装的,这个自己装上就行

packagemain
import(
"container/list"
"fmt"
"go.net/websocket"
"io"
"net/http"
)
varconnidint
varconns*list.List
funcChat(ws*websocket.Conn){
deferws.Close()
item:=conns.PushBack(ws)
deferconns.Remove(item)
varerrerror
for{
vardatastring
iferr=websocket.Message.Receive(ws,&data);err!=nil{
fmt.Printf("disconnected\n")
break
}
SendMessage(item,fmt.Sprintf("%s",data))
}
}
funcSendMessage(self*list.Element,datastring){
//for_,item:=rangeconns{
foritem:=conns.Front();item!=nil;item=item.Next(){
ws,ok:=item.Value.(*websocket.Conn)
if!ok{
panic("itemnot*websocket.Conn")
}
ifitem==self{
continue
}
io.WriteString(ws,data)
}
}
// 客户端默认显示页面
funcClient(whttp.ResponseWriter,r*http.Request){
html:=`<!doctypehtml>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>golangwebsocketchatroom</title>
<scriptlanguage="javascript"type="text/javascript">
varsock=null;
varwsuri="ws://192.168.1.163:7878/chat";//这里的IP如果是局域测试的话,需要换成自己的
window.onload=function(){
console.log("onload");
sock=newWebSocket(wsuri);
sock.onopen=function(e){
console.log("connectedto"+wsuri);
}
sock.onclose=function(e){
console.log("connectionclosed("+e.code+")");
}
sock.onmessage=function(e){
console.log("messagereceived:"+e.data);
document.getElementById("list").innerHTML+=e.data;
vardiv=document.getElementById("list")
div.scrollTop=div.scrollHeight;
}
}
functionsend(){
varwho=document.getElementById('who').value;
if(who.length==0){
document.getElementById('who').focus();
return
}
varmsg=document.getElementById('msg').value;
if(msg.length==0){
document.getElementById('msg').focus();
return
}
vardata=who+"say:"+msg+"<br/><br/>";
document.getElementById('msg').value="";
document.getElementById('who').value="";
vardiv=document.getElementById("list")
div.innerHTML+=data;
div.scrollTop=div.scrollHeight;
sock.send(data);
}
</script>
</head>
<body>
<divid="list"style="height:300px;overflow-y:scroll;border:1pxsolid#CCC;">
</div>
<div>
whoareyou
<inputtype="text"id="who"size="60"/>
yourmessage
<inputtype="text"id="msg"size="60"/>
<buttononclick="send()">send</button>
</div>
</body>
</html>`
io.WriteString(w,html)
}
funcmain(){
conns=list.New()
http.Handle("/chat",websocket.Handler(Chat))
http.HandleFunc("/",Client)
err:=http.ListenAndServe(":7878",nil)
iferr!=nil{
panic("ListenAndServe:"+err.Error())
}
}


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:lucifer_qiao

查看原文:golang 聊天室

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
6073 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏