hali!
irtam egy cgi chatet pythonban, es 2 dolgot szeretnek megoldani:
1. frissuljon, ha uj uzenet erkezik
2. amikor kuldok egy uzenetet es refreshelek, akkor megint elkuldi
lecci segitsetek itt a kod:
-------------------------------------------------------------------------------------
#!/usr/bin/python
import cgitb; cgitb.enable()
from server import *
import slhtml
import time
import cgi
import os
thetime = time.asctime()[11:16]
def checkban(banlist, ip):
f = open(banlist, "r")
bans = f.read()
f.close()
if ip in bans:
print "< div align=\"center\" >< h2 >You're banned!< /h2 >< /div >"
slhtml.end_html()
exit()
def readhistory(history_file):
f = open(history_file, "r")
history = f.readlines()
f.close()
history.reverse()
count = 0
for message in history:
if count < 26:
print message+"< br / >"
count += 1
else:
pass
def writehistory(history_file, content):
f = open(history_file, "a")
f.write(content+"\n")
f.close()
def write_log(log_file, content):
f = open(log_file, "a")
f.write(content+"\n")
f.close()
def msg():
print """
< p >< h2 >Message< /h2 >< /p >
< form method="post" action="%s/cgi-bin/chat.py" >
< p >Name:< /p >
< p >< input type="text" name="name" size="26" / >< /p >
< p >Message:< /p >
< p >< textarea name="msg" cols="30" rows="3" >< /textarea >< /p >
< p >< input type="submit" value="Send!" >< /p >
< /form >""" % (Server.host)
def main():
slhtml.start_html("chat.py", "#000000", "#00ff00")
print "< div align=\"center\" >< h1 >CGI Chat< /h1 >< /div >"
checkban("/var/www/chat/banlist", os.environ["REMOTE_ADDR"])
msg()
form = cgi.FieldStorage()
if form.has_key("name") and form.has_key("msg"):
writehistory("/var/www/chat/history", "[%s] <%s> %s" % (thetime, form["name"].value, form["msg"].value))
write_log("/var/www/chat/log", "[%s] < %s > %s (%s)" % (thetime, form["name"].value, form["msg"].value, cgi.escape(os.environ["REMOTE_ADDR"])))
readhistory("/var/www/chat/history")
else:
readhistory("/var/www/chat/history")
slhtml.end_html()
if __name__ == "__main__":
main()
- 1320 megtekintés
Hozzászólások
Csak ötlet szinten:
ha írsz hozzá egy kezdetleges webservice-t, ami kontrollálja a csetelést, nem lehet megoldás?
- A hozzászóláshoz be kell jelentkezni
hat eleg uj vagyok a cgi-hez, ki tudnad fejteni bovebben?
- A hozzászóláshoz be kell jelentkezni
Nem konkrétan csak a cgi-hez kapcsolódik, inkább egyfajta technológia. Nagyon lesarkítva egy háttérben futó/figyelő szolgáltatás, amit ha meghívsz: képes adatot fogadni, műveleteket végrehajtani, értéket visszaadni. Annyival bővülne ki a jelenlegi séma, hogy pl az oldal továbbadja a form adatait a webservice-nek, és az összes többi műveletet a webszervizzel kezeled le -pl. ellenőrzöd a frissítés miatti duplikált üzenetet. Mivel a service folyamatosan fut, a beszélgetést be tudod rakni egy neked tetsző változóba, le tudod menteni xml-be stb.
http://pywebsvcs.sourceforge.net/zsi.html#SECTION003100000000000000000
- A hozzászóláshoz be kell jelentkezni
igen, egesz jo lenne, de nekem ugy tunik tobb ido lenne megtanulni, mint egy sajatot megirni. most ujrakezdtem, tobb modulban, listakkal, satobbi, eddig megvan a kinezet, a bannolas megnezese, es a neveket is automatikusan ip cimhez koti, szerintem egesz jo lesz :) egyebkent szerinted, ha ugy kezelem az uzeneteket, hogy lementem egy txt fajlba, es onnan nyitom mindig meg es adom hozza, az mennyire hasznalhato?
- A hozzászóláshoz be kell jelentkezni
ez nagyban fugg attol, hogy mekkora sereglet ellatasara tervezed az alkalmazast.
ha txt-t, xml-t hasznalsz akkor szep es olvashato allomanyban tudsz adatokat tarolni, de hamar oriasira tudnak hizni, es ezzel egyenes aranyban romlik a kezelhetoseg es a performancia. A kov. lehetoseg vmi. egyszeru beepitett db motor hasznalata -pl SQLite. Ezzel es nemi optimalizacioval egesz jol kezelhetoek a fenti gondok egy bizonyos szintig. A kov. lepes pedig vmi db motor hasznalata -PostgreSQL, MySQL... Ez a megoldas skalazhato, es eros igenybevetelnel jobb a teljesitmenyt nyujt - persze az a feltetel itt is all, h jol van felepitve az alkalmazas es a db.
- A hozzászóláshoz be kell jelentkezni
Nem valami ilyesmire jó a PUSH http kérés? (nemtom kérdem)
- A hozzászóláshoz be kell jelentkezni
mmint arra, hogy frissitsen amikor uj uzenet erkezik? mert ez a foproblema...
- A hozzászóláshoz be kell jelentkezni
Nagyon Ronda megoldás:
Frameset+HTML Refresh :P
Normális megoldás: Javascript periodic refresh
http://ajaxpatterns.org/Periodic_Refresh
Jó leírás,de angol.
### ()__))____________)~~~ ###
#"Ha én veletek, ki ellenetek?"
#ASUS eee 900 //Puppy 4.3
- A hozzászóláshoz be kell jelentkezni
koszi, sztem ez pont jo lesz, csak nem akartam javascriptet vagy ilyesmit hasznalni, mert nem ertek hozza (es nem is erdekel kulonosebben)!
- A hozzászóláshoz be kell jelentkezni
Hat marpedig anelkul talan felejtsd el a webfejlesztest 2009-ben...
Egyebkent igen, a megoldas a javascript periodic refresh, de majd figyelned kell lockolasra meg ilyesmikre. Esetleg meg lehet nezni a comet -et vagy a CGI::IRC -t
- A hozzászóláshoz be kell jelentkezni
nem, megse lesz jo... azt nem tudjatok veletlenul, hogy hogy tudnam azt teljesen cgi-ben megirni, hogy minden kliensnek egy bizonyos pillanatban frissuljon az oldal? vagy az is jo lenne ha lenne 1 szovegdoboz, amit nem lehet szerkeszteni, es az folyamatosan frissulne, de nem az egesz lap. szoval van egy frame, amin megy a chat szovege es csak az frissul.
- A hozzászóláshoz be kell jelentkezni
iframe essetleg?
### ()__))____________)~~~ ###
#"Ha én veletek, ki ellenetek?"
#ASUS eee 900 //Puppy 4.3b3
- A hozzászóláshoz be kell jelentkezni
na jo. latom nem jott valasz. legyszi aki tud segitsen, mert nem megy a frame, aki tudna segiteni nezze meg http://sandorlev.selfip.org/cgi-bin/chat/main.py forraskodjat! mert ott esetleg latjatok mi a hiba.
- A hozzászóláshoz be kell jelentkezni
Ha frameset megoldást írsz akkor elve kell 3 lap... egy HTML amiben a framek vannak. Egy frame amiben a chat szövege frissülget.
meg egy másik amiben a beírkálós form van.
index.html
azUtolsoXUzenetetkiiro.py
aBeirogatosResztMegjeleito.py
9 éve nem láttam frameseteet de kb
-CUT:index.html----------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>NagyonChat</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<frameset rows="*,200" cols="*" framespacing="0" frameborder="no" border="0">
<frame src="azUtolsoXUzenetetkiiro.py" name="topFrame" >
<frame src="aBeirogatosResztMegjeleito.py" name="mainFrame" scrolling="NO" noresize>
</frameset>
<noframes><body>
</body></noframes>
</html>
--CUT---------------------------------------------------
A megjelenítős py. meg írjon ki egy ilyet:
<meta http-equiv="refresh" content="10;url=?" />
ez ugye 10 masodpercenkent refreshel
### ()__))____________)~~~ ###
#"Ha én veletek, ki ellenetek?"
#ASUS eee 900 //Puppy 4.3b3
- A hozzászóláshoz be kell jelentkezni
aha ez mar telleg jo lenne. viszont arra nincs otlet hogy hogy tudom megoldani, hogy mondjuk aBeirogatResztMegjelentio.py ne legyen kulon hozzaferheto? szal hogy a framebe jo legyen, viszont ne lehessen csak azt elerni.
- A hozzászóláshoz be kell jelentkezni
Ha Framesset helyett Iframet használsz akkor szerintem igen
Mármint akkor a BeirogatResztMegjelentio.py ben van egy iframe, amibe bele kerül a Szövegetkirós.py.
### ()__))____________)~~~ ###
#"Ha én veletek, ki ellenetek?"
#ASUS eee 900 //Puppy 4.3b3
- A hozzászóláshoz be kell jelentkezni
de vagod mondjuk ugy hogy direkt megcsinalom hogy csak ennyit tudjon es senki ne tudjon menni mondjuk a http://sandorlev.selfip.org/beirogtoscucc.py-ra, mert az hogy nezne mar ki. hanem csak a html laprol.
- A hozzászóláshoz be kell jelentkezni
iframe esetén nincs index.html ill az a beirogatós, és az hívjameg amásikat... ergo ha a beirogatós tszik akkor a megjelenítős is...
### ()__))____________)~~~ ###
#"Ha én veletek, ki ellenetek?"
#ASUS eee 900 //Puppy 4.3b3
- A hozzászóláshoz be kell jelentkezni
szal ha kulon ramegyek a beirogatosra akkor bejon a masik is? lehet nem ertem :) mind1 kiprobalom
szerk: megcsinaltam most meg megy egy kicsit aztan leallitom, ha olvasod kb fel 10 elott, nezd meg (am egesz jo), de azt meg mindig nem vagom, hogy most van 3 resze, es hogy azt hogyan tudom megcsinalni, hogy kulon ne lehessen elerni a reszeket, urlbol vagy ilyesmi
- A hozzászóláshoz be kell jelentkezni
egyebkent kosz mindent majd holnap megnezheted a veglegest ha van kedved, mert a scriptek mar megvannak, csak a html lapot kell osszerakni valahogy. meg aztan valamit kitalalok a kulon eleresre...
- A hozzászóláshoz be kell jelentkezni
Éppen hasonló példaprogramot csináltam a tanítványaimnak.
Teljesen alaptudású chat program, de éppen a kliensek frissítése implementálva van benne. A szerver persze Java, nem Python, de nem lehet minden kerítés kolbászból.
Itt van online a csetprogram maga:
http://rizsi.com/webapp.html
És itt van hozzá forrás, ha esetleg érdekel:
svn://rizsi.com:9000/szig2009/trunk/examples/hu.szig.web
- A hozzászóláshoz be kell jelentkezni