jsup/templar-kr 업보팅 서비스 보완 방안
jsup/templar-kr 업보팅 서비스에서 보팅 누락을 방지하고 포스팅 회피시간 제약을 완화하기 위한 보완 방안입니다. 포스팅 회피 시간에 대한 내용은 아래의 링크에 있습니다.
jsup / templar-kr 업보팅 관련 포스팅 회피 시간
https://steemit.com/hive-141029/@joviansummer/3rp6ly-jsup-templar-kr
보팅 관련 코드를 수정하여 매일 밤 12시에 그날 보팅하지 않은 ID 목록을 생성하도록 합니다. 이 목록은 별도의 로그 파일로 저장합니다.
업보팅 서비스 보완 프로세스를 별도로 개발하여 구동합니다. 이 프로세스는 매일 새벽 1시에 jsup/templar-kr에서 보팅하지 않은 ID 목록 파일을 읽어서 여기에 포함된 ID에 대하여 보팅 누락 여부를 검사합니다.
전날 00:00:00 ~ 23:59:59 사이에 작성된 게시물이 있는데 보팅이 누락되어 있으면 스팀파워 임대 비율에 맞추어 보팅을 합니다.
예전에 문제가 생겼던 사례를 생각해 보면, 스팀 api 서버에서 작성 게시물에 관한 정보를 제대로 응답해주지 않아서 보팅이 누락되었던 상황이었습니다.
따라서, 보완 프로세스에서는 대상 ID의 게시물을 확인할 때 api 서버에 요청을 보내는 방식이 아니라 steemit.com 웹서버에 접속해서 게시물 목록을 확인하도록 만들어 보려고 합니다. 작업은 더 복잡해 지겠지만 누락 방지 측면에서는 이렇게 하는 것이 더 나을 것으로 생각됩니다.
업보팅은 여전히 api 서버에 요청을 보내는 방식으로 이루어집니다.
개발에 시간이 얼마나 걸릴지 모르겠습니다만, 업보팅이 안정적으로 잘 이루어지고 있기 때문에 시급한 상황은 아닌 것 같습니다. 차근차근 진행해 보려고 합니다.
jsup 업보팅(upvoting) 서비스 소개
https://steemit.com/steemit/@jsup/jsup-upvoting
수혜자 지정 기능 추가
https://steemit.com/upvoting/@jsup/3elk9f
jsup 업보팅 서비스 - SP 임대량과 보팅 비중(vote weight) 계산
https://steemit.com/hive-196917/@joviansummer/jsup-sp-vote-weight
start success go! go! go!
시스템이 개발완료되면 @jsup 및 @templar-kr(천국풀)은 누락된 것도 자정을 기해 자동으로 찾아내어 보팅을 해 주는 서비스가 됩니다.
@heaven.pool(천국풀)은 @templar-kr(천국풀 오리지날)의 부계정입니다.
현재 설계 진행중입니다. 시간은 좀 걸릴 수도 있을 것 같습니다.
자동 보팅관련 질문이 있는데요,
제가 개발하고 있는 플레이스팀 앱에서 포스팅하면, 즉시 서버에서 보팅을 해주고 있는데 이 경우 큐레이션 보상이 없다고 합니다.
서버에서 시간을 두고서 보팅을 하려면, 혹시 어떻게 해야 하는지 아시나요? 서버에서 setTimeout이란 함수로 타이머를 설정해봤는데, 긴 타이머 설정은 서버 비용 증가가 된다고 합니다. (서버에서 계속 시간을 체크하고 있어야 해서 그럴거 같습니다). 혹시 보팅 시간 지정에 좋은 방법이 있을까요? (참고로 저는 파이어베이스에서 자바스크립트로 구현해서 사용중에 있습니다.)
제 경우엔 steem-python을 활용해서 구현했습니다.
보팅 대상 포스트의 id와 생성시간을 가지고 있으면서 1분마다 현재 시간과 생성시간의 차이를 계산하여, 지정된 차이값보다 커지면 그때 업보팅을 수행하도록 만들었습니다. time.sleep()을 사용하면 간단하게 해결되기 때문에 보팅 딜레이 측면에서는 특별히 고민되는 부분이 없었습니다.
잘은 모르겠습니다만, 혹시 서버쪽에서 시간을 지정하기가 어렵다면, 클라이언트쪽에서 포스팅을 하면 몇분 기다렸다가 서버측에 보팅 요청을 보내고 그 때 서버가 즉시 보팅을 하도록 구성하면 어떨까하는 생각도 듭니다.
제가 조언을 드릴만큼 조예가 깊지 못해서 도움이 될런지 모르겠습니다.
조언 많은 도움이 됩니다~
별도의 서버를 운영할 때는 sleep이나 timer를 사용하면 문제가 없는거 같네요.
파이어베이스 서비스는 timer를 사용하는 시간동안 과금이 된다고 합니다. 그래서 일단 앱에서 timeout 함수로 보팅 요청을 지연시켰습니다. 앱이 foreground일 때만 동작하고, background 상태에서는 안되다가 foreground 상태가 되면 요청 보내네요.
감사합니다!
도움이 되었다니 다행입니다. 플레이스팀 앱 잘 사용하고 있습니다. 감사합니다.