Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
392 views
in Technique[技术] by (71.8m points)

Heroku, socket programming, Deployment without web ,python

I am trying to deploy a server in Heroku, just a listening socket which is always open to listen to a client through internet

import sys
import socket
import selectors
import traceback

import libserver

sel = selectors.DefaultSelector()


def accept_wrapper(sock):
    conn, addr = sock.accept()  # Should be ready to read
    print("accepted connection from", addr)
    conn.setblocking(False)
    message = libserver.Message(sel, conn, addr)
    sel.register(conn, selectors.EVENT_READ, data=message)


lsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname(socket.gethostname())
port = 3550 #lsock.getsockname()[1]     

print(socket.gethostname())

# Avoid bind() exception: OSError: [Errno 48] Address already in use
lsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
lsock.bind((host, port))
lsock.listen()
print("listening on", (host, port))
lsock.setblocking(False)
sel.register(lsock, selectors.EVENT_READ, data=None)

try:
    while True:
        events = sel.select(timeout=None)
        print("events is selected"+" "+str(events[0][1]))
        for key, mask in events:
            if key.data is None:
                accept_wrapper(key.fileobj)
                print(" key.fileobj is socket " + " " )
            else:
                message = key.data
                print(" the message is from key.data  which is printed below"+ " ") #check
                print(key.data)
            # the intendation of try except is changed from beneath else to beneath while loop.
                try:
                    message.process_events(mask)
                    print("message.process_events will be going on now, like checking event for nxt connection")#check
                except Exception:
                    print(
                        "main: error: exception for",
                        f"{message.addr}:
{traceback.format_exc()}",
                    )
                    message.close()

                    print("message closing, this is because eroor occured and we could send not it")# check
except KeyboardInterrupt:
    print("caught keyboard interrupt, exiting")
finally:
    print("finally closing")  #check
    sel.close()

So and i also want to know how to connect a client to the server,(after i can deploy it first) what is the ip and port to be used,

I have this code working on my local system, ubuntu terminal ... i would like to share whatever data is req futher, but i would like if someone can explain the basics to be done.

procfile worker : python3 server.py


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...