• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經典c++博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            這個程序簡單,使用google go語言 golang和html5的websocket建立一個簡單的web聊天程序。

            程序如下:
              1 package main
              2 
              3 import (
              4     "code.google.com/p/go.net/websocket"
              5 
              6     "fmt"
              7     "io"
              8     "net/http"
              9 )
             10 
             11 func Echo(ws *websocket.Conn) {
             12 
             13     var err error
             14 
             15     mail := ws.Config().Location.Query().Get("mail")
             16     mailto := ws.Config().Location.Query().Get("mailto")
             17 
             18     fmt.Printf("%s, %s\n", mail, mailto)
             19 
             20     mailmap[mail] = ws
             21 
             22     fmt.Printf("%v\n", ws)
             23 
             24     msgconnect := mail + " connect  "
             25     fmt.Println("server: " + msgconnect)
             26 
             27     if err = websocket.Message.Send(ws, msgconnect); err != nil {
             28         fmt.Println("Can't send")
             29         return
             30     }
             31 
             32     for {
             33         var reply string
             34 
             35         if err = websocket.Message.Receive(ws, &reply); err != nil {
             36             fmt.Println("Can't receive")
             37             break
             38         }
             39 
             40         fmt.Println("Received back from client: " + reply)
             41 
             42         wst, err1 := mailmap[mailto]
             43         if !err1 {
             44             msg := mailto + " not connect  "
             45             fmt.Println("server: " + msg)
             46 
             47             if err = websocket.Message.Send(ws, msg); err != nil {
             48                 fmt.Println("Can't send")
             49                 break
             50             }
             51             continue
             52         }
             53 
             54         msg := mail + ":" + reply
             55         fmt.Println("Sending to client: " + msg)
             56 
             57         if err = websocket.Message.Send(wst, msg); err != nil {
             58             fmt.Println("Can't send")
             59             break
             60         }
             61     }
             62 }
             63 
             64 // 網頁客戶端
             65 func Client(w http.ResponseWriter, r *http.Request) {
             66     html := `<!doctype html>
             67 <!doctype html>
             68 <html>
             69 <head>
             70     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
             71     <title>golang websocket chatroom</title>
             72     <script src="http://img3.douban.com/js/packed_jquery.min6301986802.js"></script>
             73     
             74 </head>
             75 <body>
             76     <h1>WebSocket chat with server </h1>
             77     <div id="log" style="height: 300px;overflow-y: scroll;border: 1px solid #CCC;">
             78     </div>
             79     <div>
             80         
             81             <p>
             82                 mail: <input id="mail" type="text" value="automate@qq.com">
             83             </p>
             84 
             85             <p>
             86                 mailto: <input id="mailto" type="text" value="program@qq.com"><button onclick="connectto();">Connect to</button>
             87             </p>
             88 
             89             
             90 
             91             <p>
             92                 Message: <input id="msg" type="text" value="Hello, world!"><button onclick="sendto();">Send Message</button>
             93             </p>
             94 
             95 
             96          
             97     </div>
             98     
             99 </body>
            100 
            101 
            102 <script>
            103         
            104 
            105         
            106 
            107         function connectto() {
            108             var mail = document.getElementById('mail').value;
            109             console.log(mail);
            110 
            111             var mailto = document.getElementById('mailto').value;
            112             console.log(mailto);
            113 
            114             var url = "ws://127.0.0.1:8001/chatroom?mailto=" + mailto + "&mail=" + mail;
            115 
            116             ws = new WebSocket(url);
            117 
            118             ws.onopen = function(e){
            119             console.log("onopen");
            120             console.dir(e);
            121             };
            122 
            123             ws.onmessage = function(e){
            124                 console.log("onmessage");
            125                 console.dir(e);
            126                 $('#log').append('<p>'+e.data+'<p>');
            127                 $('#log').get(0).scrollTop = $('#log').get(0).scrollHeight;
            128             };
            129 
            130             ws.onclose = function(e){
            131                 console.log("onclose");
            132                 console.dir(e);
            133             };
            134 
            135             ws.onerror = function(e){
            136                 console.log("onerror");
            137                 console.dir(e);
            138             };
            139 
            140 
            141          };
            142 
            143         function sendto() {
            144             var mail = document.getElementById('mail').value;
            145             var msg = document.getElementById('msg').value;
            146             $('#log').append('<p style="color:red;">' + mail + ' : '+msg+'<p>');
            147             $('#log').get(0).scrollTop = $('#log').get(0).scrollHeight;
            148 
            149             ws.send(msg);
            150          };
            151 
            152     </script>
            153 </html>
            154 `
            155     io.WriteString(w, html)
            156 }
            157 
            158 var mailmap = make(map[string]*websocket.Conn, 10)
            159 
            160 func main() {
            161 
            162     fmt.Println("listen on port 8001")
            163     fmt.Println("visit http://127.0.0.1:8001/chat with web browser(recommend: chrome)")
            164 
            165     http.Handle("/", websocket.Handler(Echo))
            166     http.HandleFunc("/chat", Client)
            167     err := http.ListenAndServe(":8001", nil)
            168 
            169     if err != nil {
            170         panic("ListenAndServe: " + err.Error())
            171     }
            172 }
            173 

            運行http://127.0.0.1:8001/chat
            在兩個不同的瀏覽器下 互給用戶名,連接后就可以開始聊天

            如下圖:



            posted on 2012-12-20 15:32 漂漂 閱讀(4378) 評論(1)  編輯 收藏 引用

            FeedBack:
            # re: 在google go語言 golang中,html5,使用websocket,建立一個最簡單的高并發web聊天室 2012-12-20 15:36 sdfdsaf
            sfdsfsdafds  回復  更多評論
              
            国产精品美女久久久久| 久久久久高潮综合影院| 91久久精品国产91性色也| 久久99国产精品99久久| 久久夜色精品国产亚洲av| 久久综合精品国产二区无码| 久久99国产精品久久99果冻传媒| 久久嫩草影院免费看夜色| 亚洲国产精品无码久久一线| 香蕉久久一区二区不卡无毒影院| 四虎影视久久久免费观看| 91精品国产9l久久久久| 亚洲精品乱码久久久久久不卡| 成人国内精品久久久久一区| 日韩欧美亚洲国产精品字幕久久久 | 中文字幕精品久久久久人妻| 少妇人妻88久久中文字幕| 国产99久久九九精品无码| 亚洲中文久久精品无码ww16| 品成人欧美大片久久国产欧美...| 欧美日韩精品久久久久| 国产毛片久久久久久国产毛片 | 97精品依人久久久大香线蕉97| 国产精品久久亚洲不卡动漫| 囯产极品美女高潮无套久久久| 国产精品美女久久久免费| 2021少妇久久久久久久久久| 新狼窝色AV性久久久久久| 久久久国产视频| 亚洲伊人久久成综合人影院 | 亚洲午夜久久影院| 国产精品久久亚洲不卡动漫| 久久天天躁狠狠躁夜夜avapp| 无码任你躁久久久久久老妇| 久久亚洲AV永久无码精品| 99久久无码一区人妻| 久久99精品久久久久久不卡| 国产女人aaa级久久久级| 97精品伊人久久久大香线蕉| 国产L精品国产亚洲区久久| 亚洲天堂久久精品|