473,387 Members | 1,621 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

using Pyro for network games

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

Aug 1 '05 #1
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!
Aug 2 '05 #2
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!

Aug 2 '05 #3
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!
Aug 5 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

20
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? ...
1
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...
5
by: secun | last post by:
Has anyone used python to deploy (non-python) software on a Windows network?
0
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,...
3
slapshock
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...
2
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...
2
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...
0
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...
8
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...
0
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$) { } ...
0
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...
0
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
0
BarryA
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...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
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...
0
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...
0
Oralloy
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,...
0
jinu1996
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...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.