服务器没有正确回包,GO 中的长轮询,服务器没有正确响应?

我正在尝试实现一个简单的“全局”计数器,该计数器根据点击浏览器按钮上的按钮的每个用户进行更新。例如,如果您转到网站并单击按钮,如果我在同一个网站上,我会看到我这边的计数器增加。我试图通过长轮询来做到这一点,但我面临着一些问题。主要是服务器变量没有像我认为的那样回来。

服务器:

package main

import (

"net/http"

"log"

"io"

"io/ioutil"

)

var messages chan string = make(chan string, 100)

var counter = 0

func PushHandler(w http.ResponseWriter, req *http.Request) {

body, err := ioutil.ReadAll(req.Body)

if err != nil {

w.WriteHeader(400)

}

counter += 1

messages

}

func PollResponse(w http.ResponseWriter, req *http.Request) {

io.WriteString(w,

}

func main() {

http.Handle("/", http.FileServer(http.Dir("./")))

http.HandleFunc("/poll", PollResponse)

http.HandleFunc("/push", PushHandler)

err := http.ListenAndServe(":8005", nil)

if err != nil {

log.Fatal("ListenAndServe: ", err)

}

}

客户端:

function longpoll(url, callback) {

var req = new XMLHttpRequest ();

req.open ('GET', url, true);

req.onreadystatechange = function (aEvt) {

if (req.readyState == 4) {

if (req.status == 200) {

callback(req.responseText);

longpoll(url, callback);

} else {

alert ("long-poll connection lost");

}

}

};

req.send(null);

}

function recv(msg) {

var box = document.getElementById("counter");

box.value += msg + "\n";

}

function send() {

var box = document.getElementById("counter");

var req = new XMLHttpRequest ();

req.open ('POST', "/push?rcpt=", true);

req.onreadystatechange = function (aEvt) {

if (req.readyState == 4) {

if (req.status == 200) {

} else {

alert ("failed to send!");

}

}

由于某种原因,计数器变量没有从服务器返回。我相信每次单击按钮时我都会更改状态,因此 longpolling 函数应该获取新更新的计数器变量。如果您有任何建议,请让我知道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值