Hi, everyone.
In topic "2-player game, client and server at localhost", I've asked
about subj, and Peter Hansen suggested to switch to Twisted, Pyro or
the like.
I've tried using Pyro.
I've written a very very simple test-game, in which you have 2 balls
controlled by 2 players. Each player moves his mouse somewhere at
his window, and his ball starts moving towards the pointer. No
objectives, just to test how it works. The code is very small, so I
can put it all here, skipping obvious stuff.
I've tried playing this test-game via local-host - all is ok.
Then I've tested via Internet connection with my friend. I have a
33.6 Kbps modem, he has a 2 MBps dedicated line (if this is the term),
and we ran a server at his pc and both connected to it. His ball ran as
a child, smoothly and quickly, while I had about 5 fps :(, and for him
it looked like my ball is simply very slow. I realise that client at
my pc *has* to work slower than the client at server's pc, but hey,
I've played Quake2 and WarCraft 2 via 33.6 modem, and those should have
much more stuff to transfer per second :(
Please help me in any way you can think of. I'd welcome links to
Python games written with Pyro, tips on what I am doing wrong, on not
Pythonically enough - anything.
############################server.py############# ####
#
[..imports..]
class game__(game_, Pyro.core.ObjBase):
def __init__(self):
#storage for balls' coordinates
game_.__init__(self)
Pyro.core.ObjBase.__init__(self)
[..server initialization..]
daemon.requestLoop()
END#########################server.py############# ####
############################client.py############# ####
[..imports..]
[..preparations to create proxy..]
proxy=Pyro.core.getAttrProxyForURI(URI)
[..imports..]
def process_user_input(game, id):#id is client's id - 0 or 1
nx, ny = pygame.mouse.get_pos()
x, y = game.ball[id].get_pos()
dx, dy = nx - x, ny - y
leng = sqrt(dx*dx + dy*dy)
k = 20 / leng
dx *= k
dy *= k
game.move(id, dx, dy) #remote call: move ball
id = proxy.get_n_clients() #which ball to control
if id < 2:
proxy.new_client()
pygame.init()
scr = pygame.display.set_mode((640, 480))
g = game(proxy.get_status(), scr)
#get_status provides 2 pairs of balls's current coordinates
#g, "game" instance, is a local storage, able to render itself
while 1:
g.set_status(proxy.get_status())
g.render()
process_user_input(proxy, id)
time.sleep(0.03)
[..quit = (ESCAPE is pressed)..]
if quit: break
END#########################client.py############# ####
--
Best Regards,
Michael Rybak mailto:ac******@ukr.net 3 1901
Michael Rybak <ac******@ukr.net> wrote: Hi, everyone. In topic "2-player game, client and server at localhost", I've asked about subj, and Peter Hansen suggested to switch to Twisted, Pyro or the like.
I've tried using Pyro.
I've written a very very simple test-game, in which you have 2 balls controlled by 2 players. Each player moves his mouse somewhere at his window, and his ball starts moving towards the pointer. No objectives, just to test how it works. The code is very small, so I can put it all here, skipping obvious stuff.
I've tried playing this test-game via local-host - all is ok. Then I've tested via Internet connection with my friend. I have a 33.6 Kbps modem, he has a 2 MBps dedicated line (if this is the term), and we ran a server at his pc and both connected to it. His ball ran as a child, smoothly and quickly, while I had about 5 fps :(, and for him it looked like my ball is simply very slow. I realise that client at my pc *has* to work slower than the client at server's pc, but hey, I've played Quake2 and WarCraft 2 via 33.6 modem, and those should have much more stuff to transfer per second :(
Please help me in any way you can think of. I'd welcome links to Python games written with Pyro, tips on what I am doing wrong, on not Pythonically enough - anything.
Do not use pyro, use simple UDP protocol.
I've written networked tetris in python, communicating via
UDP protocol, and used it successfully on very congested lines.
If all you need is to transfer pointer coordinates, UDP is perfect since
you do not need feedback.
use something like this for server:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', port))
while 1:
data, addr = s.recvfrom(1024)
print `data`
and for client:
import socket
outsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
outsock.bind(('', 0))
outsock.sendto('message', ('server-hostname', server_port))
--
-----------------------------------------------------------
| Radovan GarabĂ*k http://kassiopeia.juls.savba.sk/~garabik/ |
| __..--^^^--..__ garabik @ kassiopeia.juls.savba.sk |
-----------------------------------------------------------
Antivirus alert: file .signature infected by signature virus.
Hi! I'm a signature virus! Copy me into your signature file to help me spread!
gn20kjss> Do not use pyro, use simple UDP protocol.
gn20kjss> I've written networked tetris in python, communicating via
gn20kjss> UDP protocol, and used it successfully on very congested lines.
Would you please be so kind to share that with me? That would be
greatly helpful, because 1) I'd run it together with my friend to see
what speed I can get from UDP 2) I'd grasp the networking part of your
code and reuse it.
gn20kjss> If all you need is to transfer pointer coordinates, UDP is perfect since
gn20kjss> you do not need feedback.
gn20kjss> use something like this for server:
gn20kjss> import socket
gn20kjss> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
gn20kjss> s.bind(('', port))
gn20kjss> while 1:
gn20kjss> data, addr = s.recvfrom(1024)
gn20kjss> print `data`
gn20kjss> and for client:
gn20kjss> import socket
gn20kjss> outsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
gn20kjss> outsock.bind(('', 0))
gn20kjss> outsock.sendto('message', ('server-hostname', server_port))
Would you recommend some reading on this? I have some immediate
questions to your code, but don't want to flood here. OK, I will flood
here a bit: what's the print `` syntax?
P.S. I loved your virus alert ;)
gn20kjss> --
gn20kjss> -----------------------------------------------------------
gn20kjss> | Radovan Garabik http://kassiopeia.juls.savba.sk/~garabik/ |
gn20kjss> | __..--^^^--..__ garabik @ kassiopeia.juls.savba.sk |
gn20kjss> -----------------------------------------------------------
gn20kjss> Antivirus alert: file .signature infected by signature virus.
gn20kjss> Hi! I'm a signature virus! Copy me into your signature file to help me spread!
--
Best Regards,
Michael Rybak mailto:ac******@ukr.net
Antivirus alert: file .signature infected by signature virus.
Hi! I'm a signature virus! Copy me into your signature file to help me spread!
Michael Rybak <ac******@ukr.net> wrote: gn20kjss> Do not use pyro, use simple UDP protocol. gn20kjss> I've written networked tetris in python, communicating via gn20kjss> UDP protocol, and used it successfully on very congested lines.
Would you please be so kind to share that with me? That would be
http://melkor.dnp.fmph.uniba.sk/~garabik/pytris.html
contrary to what the page says, you do not need pyncurses, just plain
curses as included with modern pythons
greatly helpful, because 1) I'd run it together with my friend to see what speed I can get from UDP 2) I'd grasp the networking part of your code and reuse it.
see the Net() class. I recommend you to use the same number for myport
and otherport (you can with UDP, and it makes traversing firewalls
easier) gn20kjss> If all you need is to transfer pointer coordinates, UDP is perfect since gn20kjss> you do not need feedback.
gn20kjss> use something like this for server:
gn20kjss> import socket gn20kjss> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) gn20kjss> s.bind(('', port)) gn20kjss> while 1: gn20kjss> data, addr = s.recvfrom(1024) gn20kjss> print `data`
gn20kjss> and for client:
gn20kjss> import socket
gn20kjss> outsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) gn20kjss> outsock.bind(('', 0)) gn20kjss> outsock.sendto('message', ('server-hostname', server_port)) Would you recommend some reading on this? I have some immediate
just the socket.socket documentation, and generally for UDP protocol,
see e.g. http://www-net.cs.umass.edu/kurose/transport/UDP.html
Using it is very simple, on one computer, you send a (short) string,
and on the other computer you receive the string (or it might be lost on
the way). For your situation, I'd recommend to implement some sort of
time constrain - e.g. if user moves cursor very fast, ensure that the
coordinates are not transmitted with higher frequency that 50 Hz (or
something). And combine the coordinates into one packet - it always
helps to reduce the number of packets.
questions to your code, but don't want to flood here. OK, I will flood here a bit: what's the print `` syntax?
the same as repr, i.e. textual representation of a variable - good for
debugging P.S. I loved your virus alert ;)
and you got infected I see :-)
--
-----------------------------------------------------------
| Radovan GarabĂ*k http://kassiopeia.juls.savba.sk/~garabik/ |
| __..--^^^--..__ garabik @ kassiopeia.juls.savba.sk |
-----------------------------------------------------------
Antivirus alert: file .signature infected by signature virus.
Hi! I'm a signature virus! Copy me into your signature file to help me spread! This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: jblazi |
last post by:
How do I find out my own IP number (using Pythoi of course). And how do I
send/receive data to/from andother TCP/IP socket (of known ip number)?
I mean: which module do I have to use for that?
...
|
by: hyperbob |
last post by:
Hi,
I'm working on a distributed application using Pyro, and I've come
across several issues I'm not really sure how to handle, since this is
my first distributed application.
My application...
|
by: secun |
last post by:
Has anyone used python to deploy (non-python) software on a Windows
network?
|
by: adam |
last post by:
I'm using Pyro to develop a distribuited system
running my integration test suite I've found a strange
behaviour
it seems that whenever I have a failed resolve or unregister on
a name server,...
|
by: slapshock |
last post by:
hello!!!
i have a problem, i dont know how to network games that is created in vb6...
please help me on how to do it....
what are the components that i can use in order for the system to work in...
|
by: =?ISO-8859-1?Q?S=E9bastien_Ramage?= |
last post by:
Hi !
I'm trying to build an client/server app based on Pyro and sqlite3.
But I have a problem using sqlite3 on the server
I got this error :
sqlite3.ProgrammingError: ('SQLite objects...
|
by: jamitwidme |
last post by:
Hello everyone
Can someone help me fix this problem?
I am using an example from Pyro(Python Remote Object) website
directly.
It is the last example from...
|
by: hussain3047 |
last post by:
Hi
I want to upload a single file via FTP through different network adapters
or WAN connections
I will break the file into several small pieces and upload it to a single destination...
|
by: tvnaidu |
last post by:
consumer appliance device with ethernet (RJ45) interface can be plug into home router or office router within that LAN, local DHCP server assigns IP address with that LAN, this contains web interface...
|
by: aa123db |
last post by:
Variable and constants
Use var or let for variables and const fror constants.
Var foo ='bar';
Let foo ='bar';const baz ='bar';
Functions
function $name$ ($parameters$) {
}
...
|
by: ryjfgjl |
last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
| |