[英]Discarding transport error while using Nodejs + SocketIO
我正在構建一個android
聊天應用程序。 我在服務器端使用nodejs
並嘗試使用它實現socketIO的android客戶端。 首先,客戶端向服務器回送“hello”,然后服務器將其回送給客戶端。 這很好用。 現在有一個Button
,按下時EditText
的文本回顯到服務器。 服務器應該將文本回送給客戶端。 但是,只要文本回顯到服務器,我就會在服務器端獲得Discarding transport
錯誤,並且不會回顯任何內容。 客戶無法進一步回應任何事情。 這些代碼有什么問題?
var http = require('http'),fs = require('fs');
var app = http.createServer(function (req, res) {
res.end();
}).listen(8000, '127.0.0.1');
var io = require('socket.io').listen(app);
io.sockets.on('connection', function(socket) {
socket.on('echo', function(data) {
socket.emit('echoback', data);
});
});
package com.jack.pri;
import java.net.MalformedURLException;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import io.socket.*;
public class MainActivity extends Activity {
private SocketIO socket;
private TextView tview;
private Button btn;
private EditText tt;
private String k;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tview=(TextView) findViewById(R.id.tv);
tt = (EditText) findViewById(R.id.et);
btn = (Button) findViewById(R.id.button1);
//socket = null;
try {
socket = new SocketIO("http://10.0.2.2:8000");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.connect(new IOCallback() {
@Override
public void on(String event, IOAcknowledge ack, Object... args) {
if ("echoback".equals(event) && args.length > 0) {
tview.setText(""+args[0]);
Log.e("received",""+args[0]);
}
}
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {}
@Override
public void onMessage(String data, IOAcknowledge ack) {}
@Override
public void onError(SocketIOException socketIOException) { socketIOException.printStackTrace();}
@Override
public void onDisconnect() {}
@Override
public void onConnect() {}
});
///
socket.emit("echo", "hello");
btn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
k=tt.getText().toString();
socket.emit("echo", k);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
debug - client authorized
info - handshake authorized kaHbMG-lFmuFtvkFGY2W
debug - setting request GET /socket.io/1/websocket/kaHbMG-lFmuFtvkFGY2W
debug - set heartbeat interval for client kaHbMG-lFmuFtvkFGY2W
debug - client authorized for
debug - websocket writing 1::
debug - websocket writing 5:::{"name":"echoback","args":["hello"]}
debug - emitting heartbeat for client kaHbMG-lFmuFtvkFGY2W
debug - websocket writing 2::
debug - set heartbeat timeout for client kaHbMG-lFmuFtvkFGY2W
debug - got heartbeat packet
debug - cleared heartbeat timeout for client kaHbMG-lFmuFtvkFGY2W
debug - set heartbeat interval for client kaHbMG-lFmuFtvkFGY2W
debug - websocket writing 5:::{"name":"echoback","args":["this is textbox input text"]}
info - transport end (undefined)
debug - set close timeout for client kaHbMG-lFmuFtvkFGY2W
debug - cleared close timeout for client kaHbMG-lFmuFtvkFGY2W
debug - cleared heartbeat interval for client kaHbMG-lFmuFtvkFGY2W
debug - discarding transport
我認為你需要顯式配置套接字 - 這個代碼來自github文檔[https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO] - 其中一個輪詢選項會讓問題發生遠。
var io = require('socket.io').listen(80);
io.configure('production', function(){
io.enable('browser client etag');
io.set('log level', 1);
io.set('transports', [
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
});
io.configure('development', function(){
io.set('transports', ['websocket']);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.