Jump to content

Recommended Posts

Posted

Hi, there. I'd like to know if it's possible to use a chat system here (PHP, JS, Websocket). I have a chat system made in php and integrated with a socket by using JS, and in localhost, everytime I want to use it, I have to start the server first using the command below in terminal: 

 

php.exe websocket_server.php

 

Is there any way of doing this here? If so, what are the procedures? How do I do this here? Thank you!

 

  • Replies 33
  • Created
  • Last Reply

Top Posters In This Topic

Posted

If your system opens a port (which it probably does if it needs a server half running), no it won't work on the shared hosting. You could buy a VPS to run it though.

 

If it doesn't need to open a custom port and only has to be accessed by stuff running on the hosting server, it might work using a cron, but leaving things running infinitely like this is a good way to get suspended too because they contribute to load while they're running.

Posted

If your system opens a port (which it probably does if it needs a server half running), no it won't work on the shared hosting. You could buy a VPS to run it though.

 

If it doesn't need to open a custom port and only has to be accessed by stuff running on the hosting server, it might work using a cron, but leaving things running infinitely like this is a good way to get suspended too because they contribute to load while they're running.

Unfortunately, it needs to open a port...

Posted

You can do sockets through port 80/443 if you use .htaccess to rewrite.

 

If you'd rather have ssh command line access and the ability to open any ports you want you'll need a vps. https://www.heliohost.org/vps/

Like this?

 

RewriteEngine On
RewriteRule ^websocket_server.php/(.*)$ ws://ricky.heliohost.org:80/?$1  [P,QSA,L]
Posted

Pick a port that isn't already in use, like 4000, and use cgi or cron to start your script running listening on that port. Then use something like this to redirect requests to that port

RewriteEngine on
RewriteRule ^socket/(.*)$ http://127.0.0.1:4000/$1 [P,QSA,L]
Then if you go to olimppius.heliohost.org apache will handle the html/php, but if your requests go to olimppius.heliohost.org/socket/(.*) it will be proxied to the internal port 4000 where your script is listening. Please be aware that port 4000 will not be accessible directly. For example olimppius.heliohost.org:4000 will just time out because the firewall will block it, but the firewall won't block internal ports between apache and your script.
Posted (edited)

Pick a port that isn't already in use, like 4000, and use cgi or cron to start your script running listening on that port. Then use something like this to redirect requests to that port

RewriteEngine on
RewriteRule ^socket/(.*)$ http://127.0.0.1:4000/$1 [P,QSA,L]
Then if you go to olimppius.heliohost.org apache will handle the html/php, but if your requests go to olimppius.heliohost.org/socket/(.*) it will be proxied to the internal port 4000 where your script is listening. Please be aware that port 4000 will not be accessible directly. For example olimppius.heliohost.org:4000 will just time out because the firewall will block it, but the firewall won't block internal ports between apache and your script.

 

 

Ok, just have a look at what I've done: in /home/roguitar/public_html/chat/vendor/cboden/ratchet/src/Ratchet/Server/IoServer.php

I set the port as 4000 and the address as 0.0.0.0. in line 67. And in /home/roguitar/public_html/chat/server/websocket_server.php I set the port as 4000 too in line 58. And in /home/roguitar/public_html I created a .htaccess with those lines of code you gave me, but I adapted it more or less like this:

 

RewriteEngine on
RewriteRule ^chat/server/(.*)$ http://127.0.0.1:4000/$1 [P,QSA,L]

This is because the script of the server is in chat/server/websocket_server.php. But okay...

 

In /home/roguitar/public_html/view.php I set this line (435) here in JS:     

var websocket_server = new WebSocket("ws://ricky.heliohost.org:4000/");  /* ws://localhost:8080/ AND ports 80/443 */

Now, what code do I have to type in this cron or cgi thing there? How do I do this? I'm a total newbie at it.

Edited by roguitar
Posted

Cron is the simpler way to start your socket script, but it can also cause you issues.

  • You're only allowed to do 2 cron executions per day, so if you waste them both debugging then you need to wait until the next day to try again. Running cron 3 or more times could result in your account being suspended.
  • People have a tendency to use cron to start scripts, and then they don't know how to stop the script and the poorly written script runs amok on the server causing massive load and the account ends up suspended for it.
If you want to try cron anyways knowing the risks, your command would be something like this

/usr/local/bin/ea-php72 /home/roguitar/public_html/chat/server/websocket_server.php
First set the cron execution to ONCE A DAY, and then since the server runs on UTC look at this https://www.google.com/search?q=what+time+is+it+utc and set the hour and minute fields to be a few minutes in the future.

 

To stop all of your scripts you can run a cron like this

killall -u roguitar
and set it for a few minutes in the future as well. So one start and one stop and you're done for the day on cron jobs, so make them count. The count resets at midnight UTC so I guess you could run one at 23:58, 23:59, 00:00, and 00:01 and be fine, but if you kept that going you'd be suspended.

 

The better way to do this is to use cgi to start and stop your script. I'm not going to copy/paste everything here from the wiki, but take a look at https://wiki.helionet.org/tutorials/discord-bot#starting-and-stopping-your-bot The same idea can be used to start and stop a php socket script as well.

Posted

Cron is the simpler way to start your socket script, but it can also cause you issues.

  • You're only allowed to do 2 cron executions per day, so if you waste them both debugging then you need to wait until the next day to try again. Running cron 3 or more times could result in your account being suspended.
  • People have a tendency to use cron to start scripts, and then they don't know how to stop the script and the poorly written script runs amok on the server causing massive load and the account ends up suspended for it.
If you want to try cron anyways knowing the risks, your command would be something like this

/usr/local/bin/ea-php72 /home/roguitar/public_html/chat/server/websocket_server.php
First set the cron execution to ONCE A DAY, and then since the server runs on UTC look at this https://www.google.com/search?q=what+time+is+it+utc and set the hour and minute fields to be a few minutes in the future.

 

To stop all of your scripts you can run a cron like this

killall -u roguitar
and set it for a few minutes in the future as well. So one start and one stop and you're done for the day on cron jobs, so make them count. The count resets at midnight UTC so I guess you could run one at 23:58, 23:59, 00:00, and 00:01 and be fine, but if you kept that going you'd be suspended.

 

The better way to do this is to use cgi to start and stop your script. I'm not going to copy/paste everything here from the wiki, but take a look at https://wiki.helionet.org/tutorials/discord-bot#starting-and-stopping-your-bot The same idea can be used to start and stop a php socket script as well.

 

Ok, I tried to set the cron job and after that I went to the page https://olimppius.heliohost.org/chat/server/websocket_server.php and this was the message I've got:

Service Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

Additionally, a 503 Service Unavailable error was encountered while trying to use an ErrorDocument to handle the request.

 

 

What have I done wrong?

I set the cron job to run at 13:40 today, according to this time here https://www.google.com/search?q=what+time+is+it+utc because I'm here in Brazil, and at this exact moment, it's 11:02.

 

So, I believe that the server is already initiated, and if I want to stop it, I just create another cron job and set 

killall -u roguitar

 , right?

.

I think this is all due to this problem pointed in the message shown I put above.

Posted

 

Cron is the simpler way to start your socket script, but it can also cause you issues.

  • You're only allowed to do 2 cron executions per day, so if you waste them both debugging then you need to wait until the next day to try again. Running cron 3 or more times could result in your account being suspended.
  • People have a tendency to use cron to start scripts, and then they don't know how to stop the script and the poorly written script runs amok on the server causing massive load and the account ends up suspended for it.
If you want to try cron anyways knowing the risks, your command would be something like this

/usr/local/bin/ea-php72 /home/roguitar/public_html/chat/server/websocket_server.php
First set the cron execution to ONCE A DAY, and then since the server runs on UTC look at this https://www.google.com/search?q=what+time+is+it+utc and set the hour and minute fields to be a few minutes in the future.

 

To stop all of your scripts you can run a cron like this

killall -u roguitar
and set it for a few minutes in the future as well. So one start and one stop and you're done for the day on cron jobs, so make them count. The count resets at midnight UTC so I guess you could run one at 23:58, 23:59, 00:00, and 00:01 and be fine, but if you kept that going you'd be suspended.

 

The better way to do this is to use cgi to start and stop your script. I'm not going to copy/paste everything here from the wiki, but take a look at https://wiki.helionet.org/tutorials/discord-bot#starting-and-stopping-your-bot The same idea can be used to start and stop a php socket script as well.

 

Ok, I tried to set the cron job and after that I went to the page https://olimppius.heliohost.org/chat/server/websocket_server.php and this was the message I've got:

Service Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

Additionally, a 503 Service Unavailable error was encountered while trying to use an ErrorDocument to handle the request.

 

 

What have I done wrong?

I set the cron job to run at 13:40 today, according to this time here https://www.google.com/search?q=what+time+is+it+utc because I'm here in Brazil, and at this exact moment, it's 11:02.

 

So, I believe that the server is already initiated, and if I want to stop it, I just create another cron job and set 

killall -u roguitar

 , right?

.

I think this is all due to this problem pointed in the message shown I put above.

 

I think it's all because of this, lol:

 

Warning: require_once(../vendor/autoload.php): failed to open stream: No such file or directory in /home/roguitar/public_html/chat/server/websocket_server.php on line 9

 

Fatal error: require_once(): Failed opening required '../vendor/autoload.php' (include_path='.:/opt/cpanel/ea-php72/root/usr/share/pear') in /home/roguitar/public_html/chat/server/websocket_server.php on line 9

 

 

 

Posted

You could try editing /home/roguitar/public_html/chat/server/websocket_server.php on line 9 and change ../vendor/autoload.php to the full path /home/roguitar/...etc

 

The other option is you could edit the cron command to change to the correct directory first. The command would be something like this then:

cd /home/roguitar/public_html/chat/server/ && /usr/local/bin/ea-php72 /home/roguitar/public_html/chat/server/websocket_server.php
Posted

You could try editing /home/roguitar/public_html/chat/server/websocket_server.php on line 9 and change ../vendor/autoload.php to the full path /home/roguitar/...etc

 

The other option is you could edit the cron command to change to the correct directory first. The command would be something like this then:

cd /home/roguitar/public_html/chat/server/ && /usr/local/bin/ea-php72 /home/roguitar/public_html/chat/server/websocket_server.php

Ok, I did what you  suggested, but now I have the following error:

 

Warning: require_once(home/roguitar/public_html/chat/vendor/autoload.php): failed to open stream: No such file or directory in /home/roguitar/public_html/chat/server/websocket_server.php on line 10

 

Fatal error: require_once(): Failed opening required 'home/roguitar/public_html/chat/vendor/autoload.php' (include_path='.:/opt/cpanel/ea-php72/root/usr/share/pear') in /home/roguitar/public_html/chat/server/websocket_server.php on line 10

Posted

Failed opening required 'home/roguitar/public_html/chat/vendor/autoload.php'

See how there is no / at the front? Without that leading / it tries to look for a directory called home in it's present working directory. To be an absolute path it needs the / at the start.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...