2016-09-07 8 views
5

bytes``` पढ़ मेरे अजगर संस्करण: 2.7.8
बचत संस्करण: 0.9.2
अजगर-बचत संस्करण: 0.9.2
ओएस: CentOS 6.8
मेरे test.thrift फ़ाइल:अजगर बचत त्रुटि `` `TSocket 0

const string HELLO_IN_KOREAN = "an-nyoung-ha-se-yo" 
const string HELLO_IN_FRENCH = "bonjour!" 
const string HELLO_IN_JAPANESE = "konichiwa!" 

service HelloWorld { 
    void ping(), 
    string sayHello(), 
    string sayMsg(1:string msg) 
} 

client.py

# -*-coding:utf-8-*- 

from test import HelloWorld 
from test.constants import * 

from thrift import Thrift 
from thrift.transport import TSocket 
from thrift.transport import TTransport 
from thrift.protocol import TBinaryProtocol 


# Make socket 
transport = TSocket.TSocket('192.168.189.156', 30303) 

# Buffering is critical. Raw sockets are very slow 
transport = TTransport.TBufferedTransport(transport) 

# Wrap in a protocol 
protocol = TBinaryProtocol.TBinaryProtocol(transport) 

# Create a client to use the protocol encoder 
client = HelloWorld.Client(protocol) 

# Connect! 
transport.open() 

client.ping() 
print "ping()" 

msg = client.sayHello() 
print msg 
msg = client.sayMsg(HELLO_IN_KOREAN) 
print msg 

transport.close() 

server.py:

# -*-coding:utf-8-*- 

from test.HelloWorld import Processor 
from thrift.transport import TSocket 
from thrift.transport import TTransport 
from thrift.protocol import TBinaryProtocol 
from thrift.server import TServer 


class HelloWorldHandler(object): 
    def __init__(self): 
     self.log = {} 

    def ping(self): 
     print "ping()" 

    def sayHello(self): 
     print "sayHello()" 
     return "say hello from 156" 

    def sayMsg(self, msg): 
     print "sayMsg(" + msg + ")" 
     return "say " + msg + " from 156" 


handler = HelloWorldHandler() 
processor = Processor(handler) 
transport = TSocket.TServerSocket("192.168.189.156", 30303) 
tfactory = TTransport.TBufferedTransportFactory() 
pfactory = TBinaryProtocol.TBinaryProtocolFactory() 

server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory) 

print "Starting python server..." 
server.serve() 
print "done!" 

मेरे त्रुटि:

ping() 
Traceback (most recent call last): 
    File "client.py", line 29, in <module> 
    msg = client.sayHello() 
    File "/home/zhihao/bfd_mf_report_warning_service/local_test/test/HelloWorld.py", line 68, in sayHello 
    return self.recv_sayHello() 
    File "/home/zhihao/bfd_mf_report_warning_service/local_test/test/HelloWorld.py", line 79, in recv_sayHello 
    (fname, mtype, rseqid) = iprot.readMessageBegin() 
    File "build/bdist.linux-x86_64/egg/thrift/protocol/TBinaryProtocol.py", line 126, in readMessageBegin 
    File "build/bdist.linux-x86_64/egg/thrift/protocol/TBinaryProtocol.py", line 206, in readI32 
    File "build/bdist.linux-x86_64/egg/thrift/transport/TTransport.py", line 58, in readAll 
    File "build/bdist.linux-x86_64/egg/thrift/transport/TTransport.py", line 159, in read 
    File "build/bdist.linux-x86_64/egg/thrift/transport/TSocket.py", line 120, in read 
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes 

उत्तर

3

मेरे ओएस पर्यावरण समस्याओं।
मैं बंदरगाह 303039999 में बदलता हूं, यह सफलतापूर्वक चलाता है।

+0

वास्तव में, मुझे आपके कोड में कोई भी बग मिलती है। मैं थ्रिफ्ट सर्वर सुनो पोर्ट 30303 और कोई त्रुटि नहीं है। – user3410960

4

मुझे लगता है कि यह प्रश्न पुराना है, लेकिन मैंने एक ही त्रुटि संदेश मारा। यह पता चला कि सर्वर की तरफ एक टाइपो था। थ्रिफ्ट लाइब्रेरी पाइथन लॉगिंग का उपयोग करके संदेश लॉग करने का प्रयास कर रहे थे, लेकिन मैंने लॉगिंग सेट नहीं की थी, इसलिए उसने अभी कहा, "लॉगर के लिए कोई हैंडलर नहीं मिला" thrift.server.TServer ""।

जब मैं कुछ न्यूनतम प्रवेश, (सर्वर साइड में यह कोड शामिल) किया:

import logging 
logging.basicConfig(level=logging.DEBUG) 

लॉगिंग मुझे एक अजगर स्टैक ट्रेस में मेरे टाइपो से पता चला है, मैं उसे ठीक किया और फिर से काम किया। "TSocket 0 बाइट्स पढ़ें" त्रुटि का मतलब है कि सर्वर को अपवाद मिला और एक संदेश नहीं लिखा।

संबंधित मुद्दे